正在加载图片...
if(i=j) return l;/i就是j else for(p=G vertices[i]. firstarc; P: p=p->nextarc) k=p->adjvex if(l visited(( k]k& exist path(kj) return I;/下游的顶点到j有路径 i//for i//else i/lexist path DFS 解2:(以上算法似乎有问题:如果不存在路径,则原程序不能返回0。我的解决方式是在原程序的中引入 变量leve来控制递归进行的层数。具体的方法我在程序中用红色标记出来了。) nt visited[ MAXSIZE,∥指示顶点是否在当前路径上 int level=1/递归进行的层数 nt exist path DFS( ALGraph G,inti,intj)∥/深度优先判断有向图G中顶点i到顶点j 是否有路径是则返回1,否则返回0 if(i=) return1;∥就是j visited[i=l for(p=G vertices]. firstarc; p, p=p->nextarc, level f level++ k=p->adj if(!visited(k&& exist path(kj) ) return 1;/i下游的顶点到j有路径 i//else if (level=1) return O i/lexist path DFS 附加题:【严题集72④】采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存 在一条长度为k的简单路径的算法 (注1:一条路径为简单路径指的是其顶点序列中不含有重现的顶点 注2:此题可参见严题集P207-208中有关按“路径″遍历的算法基本框架。) int visited MAXSIZE; nt exist path len( ALGraph C, int i, int j, int k判断邻接表方式存储的有向图G 的顶点i到j是否存在长度为k的简单路径 if(i=jk&k=0) return1;∥找到了一条路径,且长度符合要求 else if(k>08 if(i==j) return 1; //i 就是 j else { visited[i]=1; for(p=G.vertices[i].firstarc;p;p=p->nextarc) { k=p->adjvex; if(!visited[k]&&exist_path(k,j)) return 1;//i 下游的顶点到 j 有路径 }//for }//else }//exist_path_DFS 解 2:(以上算法似乎有问题:如果不存在路径,则原程序不能返回 0。我的解决方式是在原程序的中引入 一变量 level 来控制递归进行的层数。具体的方法我在程序中用红色标记出来了。) int visited[MAXSIZE]; //指示顶点是否在当前路径上 int level=1;//递归进行的层数 int exist_path_DFS(ALGraph G,int i,int j)//深度优先判断有向图 G 中顶点 i 到顶点 j 是否有路径,是则返回 1,否则返回 0 { if(i==j) return 1; //i 就是 j else { visited[i]=1; for(p=G.vertices[i].firstarc;p;p=p->nextarc,level--) { level++; k=p->adjvex; if(!visited[k]&&exist_path(k,j)) return 1;//i 下游的顶点到 j 有路径 }//for }//else if (level==1) return 0; }//exist_path_DFS 附加题:【严题集 7.27④】采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存 在一条长度为 k 的简单路径的算法。 (注 1:一条路径为简单路径指的是其顶点序列中不含有重现的顶点。 注 2:此题可参见严题集 P207-208 中有关按“路径”遍历的算法基本框架。) int visited[MAXSIZE]; int 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)
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有