完善下列代码,要求如下任务描述 密密被困在一个迷宫里,迷宫有n个路口,编号为1-n。密密现在站在第一个路口,出口编号为m。先给出每个路口通向何处,问密密能否逃出迷宫。 编程要求 输入 多组数据,每组数据n+2行。第一行为一个正整数n代表路口的个数,之后n行,这n行中的第i行为第i个路口的向左路口、向前路口、向右路口。最后一行为一个正整数m代表迷宫的终点。当n=0时输入结束。 输出 每组数据输出一行,若密密能走出迷宫,输出“YES”,否则输出“NO”。#include <iostream> using namespace std; int m,n;//m:出口编号 n:入口 int tag;//输出标记 int DFS(int k,int (*a)[3]) {//深度搜索第k层,k:当前路口 /**************begin************/ /**************end************/ } int main() { while(cin>>n) { if(n==0)break; int i,j; tag=0; int a[n+1][3];//迷宫 for(i=1;i<=n;i++) for(j=0;j<3;j++) cin>> a[i][j]; cin>>m; DFS(1,a);//从第一层开始搜索 if(tag==1) cout<<"YES"<<endl; else if(tag==0) cout<<"NO"<<endl; } return 0; }
时间: 2023-07-23 07:18:56 浏览: 248
下面是完善后的代码:
```
#include <iostream>
using namespace std;
int m, n; //m:出口编号 n:入口
int tag; //输出标记
int DFS(int k, int (*a)[3]) { //深度搜索第k层,k:当前路口
if (k == m) { //找到出口
tag = 1;
return 1;
}
for (int i = 0; i < 3; i++) {
if (a[k][i] != 0 && a[k][i] != k) { //存在路口且不是自身
if (DFS(a[k][i], a)) { //继续搜索
return 1;
}
}
}
return 0; //搜索失败
}
int main() {
while(cin >> n) {
if(n == 0) break;
int i, j;
tag = 0;
int a[n+1][3]; //迷宫
for(i = 1; i <= n; i++) {
for(j = 0; j < 3; j++) {
cin >> a[i][j];
}
}
cin >> m;
DFS(1, a); //从第一层开始搜索
if(tag == 1) {
cout << "YES" << endl;
} else if(tag == 0) {
cout << "NO" << endl;
}
}
return 0;
}
```
代码说明:
1. 在DFS函数中,首先判断是否到达出口,如果到达则返回1表示搜索成功;否则遍历当前路口的三个方向,如果存在路口并且不是自身,则继续搜索,如果搜索成功,则返回1;如果三个方向都搜索失败,则返回0表示搜索失败。
2. 在主函数中,读入数据后调用DFS函数进行搜索,如果搜索成功则输出“YES”,否则输出“NO”。
阅读全文