完善下列代码,要求密密被困在一个迷宫里,迷宫有n个路口,编号为1-n。密密现在站在第一个路口,出口编号为m。先给出每个路口通向何处,问密密能否逃出迷宫。#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 22:18:52 浏览: 216
完善后的代码如下:
```
#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] != k && a[k][i] <= n) { // 如果通向的路口不是当前路口且存在,则进入下一层搜索
DFS(a[k][i], a);
}
}
return 0;
}
int main() {
while(cin >> n) {
if(n == 0) break;
int a[n+1][3];//迷宫
for(int i = 1; i <= n; i++) {
for(int j = 0; j < 3; j++) {
cin >> a[i][j];
}
}
cin >> m;
tag = 0;
DFS(1, a);//从第一层开始搜索
if(tag == 1) {
cout << "YES" << endl;
} else if(tag == 0) {
cout << "NO" << endl;
}
}
return 0;
}
```
在DFS函数中,我们首先判断当前路口是否是出口,如果是则标记可以逃出迷宫。然后遍历当前路口通向的所有路口,如果通向的路口不是当前路口且存在,则进入下一层搜索。在main函数中,我们先读入迷宫的信息,然后从第一个路口开始搜索。如果最终的标记为1,则输出YES,否则输出NO。
阅读全文