迷宫-是否可以到底某个坐标
迷宫-是否可以到底某个坐标
http://noi.openjudge.cn/ch0205/1792/
思路:
1.从起点出发,四个方向找
2.未找到继续往下找 找到则直接输出
#include<bits/stdc++.h> using namespace std; int dx[4]={1,-1,0,0}; int dy[4]={0,0,1,-1};//右 左 下 上 int t,n,x,y,x1,y11,nx,ny,m; char str; //pd找到pd改为true bool pd,flag[1001][1001];//记录矩阵地图 可走未false 不可走为true //当前位置坐标 int dfs(int x,int y){ for(int i=0;i<4;i++){//四个方向扩展 nx=x+dx[i]; ny=y+dy[i]; if(nx>=0 && nx<n && ny>=0 && ny<n && !flag[nx][ny]){ flag[nx][ny]=true; if(nx==x1 && ny==y11){//到终点输出 并结束 cout<<"YES"<<endl; pd=true; break; }else{//未到终点继续走 dfs(nx,ny); } } } } int main(){ cin>>m; for(int t=1;t<=m;t++){ memset(flag,false,sizeof(flag));//多组数据 flag数组设置默认false pd=false; cin>>n; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin>>str; if(str=='#'){//不可走为true flag[i][j]=true; } } } cin>>x>>y>>x1>>y11; if(flag[x][y] || flag[x1][y11]){//起点 终点不可走 直接输出NO cout<<"NO"<<endl; continue; }else{//开始dfs往前走 dfs(x,y); } if(!pd){//dfs结束 未找到输出NO cout<<"NO"<<endl; } } }
作者:newcode 更多资源请关注纽扣编程微信公众号
从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习