数据结构实验之图论四:迷宫探索
来源:互联网 发布:java jelly 编辑:程序博客网 时间:2024/06/06 19:13
problem
Problem Description
有一个地下迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关;请问如何从某个起点开始在迷宫中点亮所有的灯并回到起点?
Input
连续T组数据输入,每组数据第一行给出三个正整数,分别表示地下迷宫的结点数N(1 < N <= 1000)、边数M(M <= 3000)和起始结点编号S,随后M行对应M条边,每行给出一对正整数,表示一条边相关联的两个顶点的编号。
Output
若可以点亮所有结点的灯,则输出从S开始并以S结束的序列,序列中相邻的顶点一定有边,否则只输出部分点亮的灯的结点序列,最后输出0,表示此迷宫不是连通图。
访问顶点时约定以编号小的结点优先的次序访问,点亮所有可以点亮的灯后,以原路返回的方式回到起点。
Example Input
1
6 8 1
1 2
2 3
3 4
4 5
5 6
6 4
3 6
1 5
Example Output
1 2 3 4 5 6 5 4 3 2 1
Hint
Author
xam
code
#include <iostream>#include <memory.h>using namespace std;int g[3100][3100];int visit[3100];int n,m,s;int num;int p[3100];void dfs(int k){ p[num++]=k; for(int i=1; i<=n; i++) { if(g[k][i]&&!visit[i]) { visit[i]=1; dfs(i); p[num++]=k; } }}int main(){ int a,b; int T; cin >> T; while(T--) { memset(g,0,sizeof(g)); memset(visit,0,sizeof(visit)); cin >> n>> m>>s; for(int i=0; i<m; i++) { cin >> a >> b; g[a][b] = g[b][a] = 1; } num = 0; visit[s] =1; dfs(s); for(int i=0; i<num; i++) { if(i==0) cout << p[i]; else cout << " " << p[i]; } if(num==2*n-1) cout << endl; else cout << " 0" << endl; } return 0;}
阅读全文
0 0
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- SDUTOJ3361-数据结构实验之图论四:迷宫探索
- SDUT3361数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- SDUTACM 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- OJ3361数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- 数据结构实验之图论四:迷宫探索
- Mobilenet_YOLO
- scikit-learn
- 虚拟机ubuntu的串口使用
- Hibernate 配置文件解析
- MyEclipse连接MySQL数据库
- 数据结构实验之图论四:迷宫探索
- 数据结构第十周项目——验证算法(二)
- 微信中定时任务执行时,提示access_token失效(小记)
- 第十五周项目1 验证算法(1)插入排序之直接插入排序
- 十三周 项目1(4)
- 点阵LED扫描法介绍
- Windows 下安装 nvm 管理 nodejs 版本
- 第三周-项目四-2-顺序表应用
- LINUX调优