我们都知道图的遍历有很多种方法,其中深度优先搜索和广度优先搜索是常用的两种方法。实现输出两顶点所有路径问题实际就是图的遍历,自然想到这两种方法,下面我们在深度优先搜索的基础上实现。
以下是算法的中心思想,先从城市起点开始,深度优先搜索所有可能路径,每遍历一个顶点将其标记为访问存放至数组path[d]中,每次for循环之后把起点n标记为未访问便于重复搜索
void DFSall(Graphm *G,string u,string v,string *path,int &d){//path[]储存顶点的数组,d为路径长度,
#include
int n=getnum(u); //起点
int v1=getnum(v); //终点
G->setmark(n,VISITED);
d++;
path[d]=u;
if(n==v1&&d>=1){
cout<<"这两城市间一条简单路径为"<<endl;
for(int i=0;i<=d;i++)
cout<<path[i]<<" ";
cout<<endl;
}
for(int w=G->first(n);w<G->n();w=G->next(n,w)){
if(G->getmark(w)==UNVISITED)
DFSall(G,name[w],name[v1],path,d);
}
G->setmark(n,UNVISITED);
d--;
}
全代码
两城市所有简单路径(图的遍历)
最新推荐文章于 2023-09-11 15:49:48 发布
本文介绍如何利用深度优先搜索(DFS)在图中找出两个城市之间的所有简单路径。通过标记顶点状态并遍历所有可能路径,算法能够有效地找到所有不重复的路径。
摘要由CSDN通过智能技术生成