关于图的简单路径,输出、是否存在等总结

//输出图G从顶点u 到 v 的所有简单路径
void Allpath(Graph G,int u,int v,int m,int path[],int i){//m记录每一个顶点的下一个邻接点,i初值为0
    ENode *p;
    int j,n;
    if(m==v){
        for(j=0;j<=i;j++){
            printf("%d\n",path[j]);
        }
        printf("\n");
    }else{
        p=G->adjList[m].firstarc;
        while(p!=null){
            n=p->adjvex;
            if(visited[n]==false && n!=v){
                visited[n]=true;
                path[i+1]=n;
                Allpath(G,u,v,n,path,i+1);
                visited[n]=false;
            }
        }
    }
}
/*给无向图G 中任意两个顶点i和j
采用邻接表存储
编写算法判断这两个顶点之间是否存在一条长度为k的简单路径
*/
bool visited[maxsize];
bool existPath(Graph G,int i,int j,int k){
    if(i==j && k=0){
        return true;
    }
    else if(k>0){
        visited[i]=true;
        for(Node *p=adjList[i].firstarc;p!=null;p=p->nextarc){
            if(visited[p->adjvex]==flase && existPath(G,p->adjvex,j,k-1)==true ){
                return true;
            }
            visited[p->adjvex]=false;
        }
        return false;
    }
}
/*判断有向图的邻接表中是否有Vi->Vj的路径

*/
void DFS(Graph G,int v){
    ENode *p;
    visited[v]=true;
    visit(t);
    p=G->adjList[v].firstarc;
    while(p!=null){
        if(visited[p->adjvex]==false){
            DFS(G,p->adjvex);
        }
        p=p->nextarc;
    }
}
bool visited[maxsize];
bool existPath(Graph G,int v,int j){
    for(int i=0;i<G->vertices;i++){
        visited[i]=false;
    }
    DFS(G,v);
    if(visited[j]==false){
        return false;
    }else{
        return true;
    }
}


//邻接表 判断从u到v是否有简单路径,有则打印路径上的点
void printPath(Graph G,int u,int v,int path[]
                    ,int d,bool &exist){//路径长度d
    visited[u]=true;
    d++;
    path[d]=u;
    if(u==v && d>0){
        exist=true;
        for(int i=0;i<d;i++){
            printf("%d\n",path[i]);
        }
        return;
    }
    ENode *p=G.adjList[u].firstarc;
    int w;
    while(p!=null){
        w=p->adjvex;
        if(visited[w]==false){
            printPath(G,w,v,path,d,exist);
        }
        p=p->nextarc;
    }

}

//打印全部简单路径
void Allpath(Graph G,int u,int v,int path[],int d){//路径长度
    d++;
    path[d]=u;
    visited[u]=true;
    if(u==v && d>0){
        for(int i=0;i<d;i++){
            printf("%d\n", path[i]);
        }
        printf("\n");
    }
    ENode *p=G.adjList[u];
    int w;
    while(p!=null){
        w=p->adjvex;
        if(visited[w]==false){
            Allpath(G,w,v,path,d);
        }
        p=p->nextarc;
    }
    visited[u]=false;
}

 


posted @ 2019-12-26 10:42  ZzUuOo666  阅读(615)  评论(0编辑  收藏  举报