迷宫-是否可以到底某个坐标
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;
}
}
}