寻找师傅
作者:互联网
【问题描述】
唐僧师徒在取经路上再一次走失了,这一次狡猾的妖怪将唐僧藏入了形如迷宫的洞穴中。已知妖怪洞穴是一个N*N的正方形,其中有一些假山堵路。 输入: 第一行是一个正整数N(2<N<10),后面包含N*N行由θ, 1, 2组成的矩阵,其中0表示可以走,1表示假山,2表示师傅的位置。 输出: 如果悟空和八戒可以救出师傅就输出YES,否则就输出NO。
【样例输入】
5
0 1 0 1 0
0 0 0 0 0
0 1 1 0 1
0 0 1 0 1
0 1 0 0 2
【样例输出】
YES
#include<iostream> using namespace std; int n; int a[11][11]={}, b[11][11]={}; // 上->右->下->左。 // int xy={{-1,0},{0,1},{1,0},{0,-1}} int dx[4]={-1,0,1,0}, dy[4]={0,1,0,-1}; void dfs(int x, int y){ // 递归边界。 if(a[x][y]==2) { cout<<"YES"; return; } // 每次搜索需要4个方向。 for(int i=0; i<=3; i++){ int x1=x+dx[i]; int y1=y+dy[i]; if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&b[x1][y1]==0&&a[x1][y1]!=1){ b[x1][y1]=1; dfs(x1, y1); b[x1][y1]=0; } } return; } int main(){ cin>>n; for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ cin>>a[i][j]; } } // 如果a[1][1]==2 -> 直接找到师傅。 if(a[1][1]==2){ cout<<"YES"; return 0; } // 如果a[1][1]==1 -> 直接被堵找不到师傅。 else if(a[1][1]==1){ cout<<"NO"; return 0; } // 如果a[1][1]==0 -> 开始寻找师傅。 else if(a[1][1]==0){ // 每次经过该路口 -> 标记路口表示曾经走过。 b[1][1]=1; // 递归开始遍历每个路口(先标记再搜索)。 dfs(1,1); } return 0; }
标签:11,cout,int,路口,寻找,&&,师傅 来源: https://www.cnblogs.com/dks0313/p/16535092.html