迷宫-是否可以到底某个坐标

迷宫-是否可以到底某个坐标

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;
        }
    }
} 

 

posted @ 2021-10-02 13:12  new-code  阅读(25)  评论(0编辑  收藏  举报