//输出图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 ",path[j]); } printf(" "); }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 ",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 ", path[i]); } printf(" "); } 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; }