#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#include<numeric>
#include<stack>
using namespace std;
const int MAXV=1001,INF=1000001;
int N,M,st,ed,cnt=0;
bool vest[MAXV];//若vest[i]已并入树中,则vest[i]=true;
int G[MAXV][MAXV];//图的边权值
int nex[MAXV];
void DFS(int i)
{
vest[i]=true;
if(i==ed)
{
cnt++;
cout<<"第"<<cnt<<"条路径如下"<<endl;
int k=st;
while(k!=ed)
{
cout<<k+1<<"->";
k=nex[k];
}
cout<<k+1<<endl;
return;
}
for(int j=0; j<N; j++)
{
if(vest[j]==false&&G[i][j]!=INF)
{
nex[i]=j;//对于路径0->1->3: nex[0]=1;nex[1]=3;
DFS(j);
vest[j]=false;
}
}
}
int main()
{
cin>>N>>M;//顶点数与边数
fill(G[0],G[0]+MAXV*MAXV,INF);
fill(vest,vest+MAXV,false);
for(int i=0; i<M; i++)
{
int a,b;
cin>>a>>b;
G[a-1][b-1]=1;
G[b-1][a-1]=1;
}
int u,v;
cin>>u>>v;//起点与终点
st=u-1;
ed=v-1;
DFS(st);
}
/*
输入:
5 7
1 2
1 3
1 4
1 5
2 4
3 5
3 4
1 4
输出:
第1条路径如下
1->2->4
第2条路径如下
1->3->4
第3条路径如下
1->4
第4条路径如下
1->5->3->4
*/
DFS求两点间所有路径
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 算法思想: 从已占领的节点往邻接节点扩张,选择所有邻接节点中value+dis[i]权值之和最低的加入已占领集合{...
- 19225 刘薇 回想自己小时候第一次独立睡觉,印象极为深刻。那是一个夏天的夜晚,我大概上幼儿园大班吧,我的太婆带...
- 【第31课】 【第32课】 烂开始,好开展,好结果。 ——不要纠结完美,碎片化时间,烂开始…… 【第33课】 时间...