密密被困在一个迷宫里,迷宫有n个路口,编号为1-n。密密现在站在第一个路口,出口编号为m。先给出每个路口通向何处,问密密能否逃出迷宫。 编程要求 输入 多组数据,每组数据n+2行。第一行为一个正整数n代表路口的个数,之后n行,这n行中的第i行为第i个路口的向左路口、向前路口、向右路口。最后一行为一个正整数m代表迷宫的终点。当n=0时输入结束。 输出 每组数据输出一行,若密密能走出迷宫,输出“YES”,否则输出“NO”。 测试说明 平台会对你编写的代码进行测试: 测试输入: 6 0 2 0 3 5 6 0 0 4 0 0 0 0 0 0 7 0 0 7 3 2 0 0 0 0 0 0 0 0 3 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************/ //如果当前路口标记为1或者已经走过,返回0(不能继续往下走) if(a[k][1]==-1||a[k][1]==0) return 0; a[k][1]=-1;//标记已经走过 if(k==m)//如果到达出口 { tag=1;//标记已经可以通关 return 1; } int t1=0,t2=0,t3=0;//上、右、下分别标记是否能够通过 if(a[k][0]!=0) t1=DFS(a[k][0],a); if(a[k][1]!=0) t2=DFS(k+1,a); if(a[k][2]!=0) t3=DFS(a[k][2],a); if(t1+t2+t3!=0)//只要有一个方向能够通过,则当前路口标记为1 { a[k][1]=1; return 1; } else return 0; /**************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; }
时间: 2024-03-13 14:43:05 浏览: 205
国密sm2 sm3 sm4 加密、解密、认证代码实现,加密解密接口已经测试通过,在实际项目中已经应用,在此分享该资源
代码看起来比较完整,但是似乎没有给出具体的解释。下面是代码的解释和注释:
```c++
#include <iostream>
using namespace std;
int m,n;//m:出口编号 n:入口
int tag;//输出标记
int DFS(int k,int (*a)[3]) {//深度搜索第k层,k:当前路口
//如果当前路口标记为1或者已经走过,返回0(不能继续往下走)
if(a[k][1]==-1||a[k][1]==0)
return 0;
a[k][1]=-1;//标记已经走过
if(k==m)//如果到达出口
{
tag=1;//标记已经可以通关
return 1;
}
int t1=0,t2=0,t3=0;//上、右、下分别标记是否能够通过
if(a[k][0]!=0) t1=DFS(a[k][0],a);
if(a[k][1]!=0) t2=DFS(k+1,a);
if(a[k][2]!=0) t3=DFS(a[k][2],a);
if(t1+t2+t3!=0)//只要有一个方向能够通过,则当前路口标记为1
{
a[k][1]=1;
return 1;
}
else 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;
}
```
首先,程序会读入一个正整数n代表路口的个数,之后n行,这n行中的第i行为第i个路口的向左路口、向前路口、向右路口。最后一行为一个正整数m代表迷宫的终点。
然后,程序会调用DFS函数进行深度搜索。DFS函数会接收两个参数:当前路口k和一个表示迷宫的数组a。DFS函数的返回值是一个int型的值,表示从当前路口是否能够到达出口。
在DFS函数内部,首先会判断当前路口是否已经走过,如果已经走过,则返回0,表示不能继续往下走。如果当前路口是出口,则标记已经可以通关,并返回1,表示已经到达出口。
如果当前路口不能到达出口,则需要进行深度搜索。根据题目描述,每个路口有三个方向:向左、向前、向右。因此,在DFS函数中,需要分别判断这三个方向是否能够到达出口。如果可以到达,则继续往下走;否则,返回0,表示不能继续往下走。
最后,如果当前路口的三个方向都不能到达出口,则返回0。如果有一个方向能够到达出口,则标记当前路口已经可以通行,并返回1。
在主函数中,程序会读入多组数据,对于每组数据,程序会先读入迷宫的信息,然后调用DFS函数进行深度搜索。如果DFS函数返回1,则输出"YES";否则,输出"NO"。
阅读全文