SDUT 3361 数据结构实验之图论四:迷宫探索
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDUT 3361 数据结构实验之图论四:迷宫探索相关的知识,希望对你有一定的参考价值。
数据结构实验之图论四:迷宫探索
Time Limit: 1000MS Memory Limit: 65536KB
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
DQE:
本题题意一开始不太明确,参考了一下已AC的代码,意思是走的过程中遇到死路返回上一级,在走下一个可行节点,直到完成第一次深度优先搜索,判断计数变量和定点数是否相等,从而判定是否为连通图,非连通图和连通图输出序列一个套路,只是最后多个0。
需要注意的是多组数据,计数变量需要再每次开始深搜之前初始化为0,不可以用static定义在DFS函数里(这样只能初始化一次,笔者一开始犯的就是这个错误)。
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 #define MVN 1010 /*本地运行时改为100左右才可以,不然运行时错误,提交时改为1000+可AC*/ 7 8 typedef struct AdjMatrix 9 { 10 int w; 11 char *info; 12 }AM; 13 14 typedef struct MGraph 15 { 16 int vex[MVN]; 17 AM arc[MVN][MVN]; 18 int vexnum,arcnum; 19 int k; 20 }MG; 21 22 void creat(MG &G) 23 { 24 int i,j,k; 25 for(k=1;k<=G.vexnum;k++) 26 { 27 G.vex[k]=k; 28 } 29 for(k=1;k<=G.arcnum;k++) 30 { 31 scanf("%d %d",&i,&j); 32 G.arc[i][j].w=1; 33 G.arc[j][i].w=1; 34 } 35 } 36 37 int count=0; //计数变量 38 int DFS(MG &G,bool *visited,int i) 39 { 40 count++; 41 visited[i]=true; 42 if(G.vex[i]==G.k) 43 printf("%d",G.k); 44 else 45 printf(" %d",G.vex[i]); 46 int k; 47 for(k=1;k<=G.vexnum;k++) 48 { 49 if(G.arc[i][k].w>0&&visited[k]==false) 50 { 51 DFS(G,visited,k); 52 printf(" %d",G.vex[i]); 53 } 54 } 55 return count; 56 } 57 58 int main() 59 { 60 int t; 61 scanf("%d",&t); 62 while(t--) 63 { 64 MG G={0}; 65 scanf("%d %d %d",&G.vexnum,&G.arcnum,&G.k); 66 creat(G); 67 int k; 68 for(k=1;k<=G.vexnum;k++) 69 { 70 if(G.vex[k]==G.k) 71 break; 72 } 73 bool visited[MVN]={false}; 74 count=0; 75 if(DFS(G,visited,k)!=G.vexnum) 76 printf(" 0\n"); 77 else 78 printf("\n"); 79 } 80 return 0; 81 } 82 83 /*************************************************** 84 User name: *** 85 Result: Accepted 86 Take time: 12ms 87 Take Memory: 1784KB 88 Submit time: 2016-11-08 21:57:57 89 ****************************************************/
以上是关于SDUT 3361 数据结构实验之图论四:迷宫探索的主要内容,如果未能解决你的问题,请参考以下文章
SDUT 2498 数据结构实验之图论十一:AOE网上的关键路径