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

我们都知道图的遍历有很多种方法,其中深度优先搜索和广度优先搜索是常用的两种方法。实现输出两顶点所有路径问题实际就是图的遍历,自然想到这两种方法,下面我们在深度优先搜索的基础上实现。
以下是算法的中心思想,先从城市起点开始,深度优先搜索所有可能路径,每遍历一个顶点将其标记为访问存放至数组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

include

include

include

include

define UNVISITED 0

define VISITED 1

using namespace std;
class Edge{
public:
int vertex,weight;
Edge(){
vertex=-1;weight=-1;
}
Edge(int v,int w){
vertex=v;weight==w;
}
};
class Graphm{
private:
int numvertex,numedge;
int **matrix;
int *mark;
string *name;
public:
Graphm(int numvert,int nedge){
int i,j;
numvertex=numvert;
numedge=nedge;
mark=new int [numvertex];
for(i=0;i

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/Yeefy_1997/article/details/53643543
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞