正在加载图片...
int exist path len( ALGraph G, int i, int j, int k)/判断邻接表方式存储的有向图G的 顶点i到j是否存在长度为k的简单路径 fir=j&&k=0) return1;∥找到了一条路径,且长度符合要求 else if(k>0) sited=I for(p=G vertices[i]. firstarc: p: p=p->nextarc) =p->adjvex; if(visited) st_path len(G, 1j, k1)em1:/剩余路径长度减一 ∥for isited[i=0;∥本题允许曾经被访问过的结点出现在另一条路径中 geese tumn0;/没找到 7.28 int path IMAXSIZE] visited MAXSIZE/暂存遍历过程中的路径 int Find all path( ALGraph G, int u, int v,intk∥/求有向图G中顶点u到v之间的所 有简单路径k表示当前路径长度 path]=u;,∥加入当前路径中 visited u]F= if(u==v)/找到了一条简单路径 printf("Found one path! n"); for(i=0path[计++) printf("d"path[,∥打印输出 else for(p=Gvertices[u]. firstarc: p: p=p->nextarc) =p->adjvex f(! visited叫) Find all pathe(GLvk+1);/继续寻找 visited u]=0; path=0;/回溯 i//Find All Path mainint exist_path_len(ALGraph G,int i,int j,int k)//判断邻接表方式存储的有向图 G 的 顶点 i 到 j 是否存在长度为 k 的简单路径 { if(i==j&&k==0) return 1; //找到了一条路径,且长度符合要求 else if(k>0) { visited[i]=1; for(p=G.vertices[i].firstarc;p;p=p->nextarc) { l=p->adjvex; if(!visited[l]) if(exist_path_len(G,l,j,k-1)) return 1; //剩余路径长度减一 }//for visited[i]=0; //本题允许曾经被访问过的结点出现在另一条路径中 }//else return 0; //没找到 }//exist_path_len 7.28 int path[MAXSIZE],visited[MAXSIZE]; //暂存遍历过程中的路径 int Find_All_Path(ALGraph G,int u,int v,int k)//求有向图 G 中顶点 u 到 v 之间的所 有简单路径,k 表示当前路径长度 { path[k]=u; //加入当前路径中 visited[u]=1; if(u==v) //找到了一条简单路径 { printf("Found one path!\n"); for(i=0;path[i];i++) printf("%d",path[i]); //打印输出 } else for(p=G.vertices[u].firstarc;p;p=p->nextarc) { l=p->adjvex; if(!visited[l]) Find_All_Path(G,l,v,k+1); //继续寻找 } visited[u]=0; path[k]=0; //回溯 }//Find_All_Path main() {
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有