1141走迷宮
阿新 • • 發佈:2018-12-11
1141.走迷宮
時限:1000ms 記憶體限制:10000K 總時限:3000ms
描述
判斷是否能從迷宮的入口到達出口
輸入
先輸入兩個不超過20的正整數表示迷宮的行數m和列數n,再輸入口和出口的座標,最後分m行輸入迷宮,其中1表示牆,0表示空格每個數字之間都有空格。
輸出
只能向上、下、左、右四個方向走若能到達,則輸出"Yes",否則輸出"No",結果佔一行。
輸入樣例
3 3 0 0 2 2 0 0 0 1 1 0 0 1 0
輸出樣例
Yes
#include<iostream> #include<cstdio> #include<cstring> int a[1000][1000],book[1000][1000]; int p,q,m,n; int flag=0; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};//右//左//下//上// using namespace std; void dfs(int x,int y)//當前x,當前y,已經走過的步數 { int tx,ty; if(x==p&&y==q) { flag=1; return; } for(int k=0;k<4;k++) { tx=x+dir[k][0]; ty=y+dir[k][1]; if(tx>=m||ty>=n||ty<0||tx<0||a[tx][ty]==1) { continue; } if(book[tx][ty]==0) { book[tx][ty]=1; dfs(tx,ty); if(flag==1)return; book[tx][ty]=0; } } } int main() { int i,j,startx,starty; //int m,n;//總共有幾行幾列 cin>>m>>n; cin>>startx>>starty>>p>>q; for(i=0;i<m;i++) for(j=0;j<n;j++) cin>>a[i][j]; book[startx][starty]=1; dfs(startx,starty); if(flag==0)cout<<"No"<<endl; else cout<<"Yes"<<endl; return 0; }