
D - 数据结构实验之图论四:迷宫探索(DFS)
发布日期:2021-05-04 14:45:13
浏览次数:25
分类:技术文章
本文共 1374 字,大约阅读时间需要 4 分钟。
Description
有一个地下迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关;请问如何从某个起点开始在迷宫中点亮所有的灯并回到起点?
Input
连续T组数据输入,每组数据第一行给出三个正整数,分别表示地下迷宫的结点数N(1 < N <= 1000)、边数M(M <= 3000)和起始结点编号S,随后M行对应M条边,每行给出一对正整数,表示一条边相关联的两个顶点的编号。
Output
若可以点亮所有结点的灯,则输出从S开始并以S结束的序列,序列中相邻的顶点一定有边,否则只输出部分点亮的灯的结点序列,最后输出0,表示此迷宫不是连通图。
访问顶点时约定以编号小的结点优先的次序访问,点亮所有可以点亮的灯后,以原路返回的方式回到起点。Sample
Input
16 8 11 22 33 44 55 66 43 61 5
Output
1 2 3 4 5 6 5 4 3 2 1
答案:
#include#include #define PI 3.1415926#define ll long long#define pb push_backconst int inf=0x3f3f3f3f;const int N = 1e5 + 10;using namespace std;int mp[1111][1111];int dp[1111];int vis[1111];int n;int cnt;void dfs(int k){ if(cnt!=1) printf(" "); printf("%d",k); for(int i=1; i<=n; i++) { if(vis[i]!=1&&mp[k][i]) { vis[i] = 1; cnt++; dfs(i); printf(" %d",k); } }}int main(){ ios::sync_with_stdio(false); int t; cin>>t; while(t--) { memset(vis,0,sizeof(vis)); memset(mp,0,sizeof(mp)); memset(dp,0,sizeof(dp)); int m,k; cin>>n>>m>>k; while(m--) { int x,y; cin>>x>>y; mp[x][y]=mp[y][x]=1; } cnt=1; vis[k]=1; dfs(k); if(cnt==n) printf("\n"); else printf(" 0\n"); } return 0;}
发表评论
最新留言
不错!
[***.144.177.141]2025年03月29日 11时15分23秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
skyfans之每天一个Liunx命令系列之二:uptime
2019-03-04
Kubernetes十三--Pod定义文件内容详解
2019-03-04
普歌- LRF-(简单易懂)笔记本电脑USB接口案例 接口多态(向下转型)
2019-03-04
Java中如何构建树结构
2019-03-04
解决eclipse字体背景变红或者变绿的问题
2019-03-04
扫雷小游戏——简单易懂
2019-03-04
软件架构-zookeeper快速入门
2019-03-04
「初级篇」跟我一起学docker(四)--容器的基本操作
2019-03-04
22 岁毕业做程序员的「普通」人,50 岁时的人生轨迹是怎样的?
2019-03-04
scala上界与下界、协变与逆变
2019-03-04
java稀疏数组
2019-03-04
全球数字货币加快研发
2019-03-04
数字化助力金融科技,实现产业良性循环
2019-03-04
2020-11-23(彻底理解KMP)
2019-03-04
angr学习笔记(7)(malloc地址单元符号化)
2019-03-04
windows环境利用start命令实现微信多开
2019-03-04
「CF149D」括号涂色 区间DP好题
2019-03-04
树状数组 模板总结
2019-03-04
「NOI2015」程序自动分析 并查集题解
2019-03-04
[JSOI2008]Blue Mary的战役地图 Hash题解
2019-03-04