两城市所有简单路径(图的遍历)

本文介绍如何利用深度优先搜索(DFS)在图中找出两个城市之间的所有简单路径。通过标记顶点状态并遍历所有可能路径,算法能够有效地找到所有不重复的路径。
摘要由CSDN通过智能技术生成

我们都知道图的遍历有很多种方法,其中深度优先搜索和广度优先搜索是常用的两种方法。实现输出两顶点所有路径问题实际就是图的遍历,自然想到这两种方法,下面我们在深度优先搜索的基础上实现。
以下是算法的中心思想,先从城市起点开始,深度优先搜索所有可能路径,每遍历一个顶点将其标记为访问存放至数组path[d]中,每次for循环之后把起点n标记为未访问便于重复搜索
void DFSall(Graphm *G,string u,string v,string *path,int &d){//path[]储存顶点的数组,d为路径长度,
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--;
}
全代码
#include

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值