问题标题: 酷町堂:3787 迷宫问题

0
0
已解决
胡景波
胡景波
中级光能
中级光能

题目链接: 酷町堂:3787 迷宫问题

3787   迷宫问题

经验值:1600 时间限制:1000毫秒 内存限制:128MB

题目描述 Description

给出一个大小为m×n的迷宫,迷宫用1表示不可通过,0表示可通过。现在给出起点和终点的坐标,分别为(sx, sy),(ex, ey)。每次可以朝上下左右四个方向移动。试判断能否从起点到达终点。

输入描述 Input Description

第一行,两个整数, m n
第二行,四个整数,sx sy ex ey
接下来m行,每行n个数字,用空格隔开,每个数字为0或1

输出描述 Output Description

如果能到达,输出"yes";否则,输出"no"

样例输入 Sample Input

3 3 1 1 3 3 0 1 1 0 0 1 1 0 0

样例输出 Sample Output

yes

数据范围及提示 Data Size & Hint

1≤m,n≤5
BFS

80分

#include<iostream>
#include<cstring>
using namespace std;
int m,n,a,b,x,y,f[25][25],minw=0x3f3f3f3f,vis[25][25],aa[25][25];
int dir[10][2]={{1,0},{0,1},{-1,0},{0,-1}};
bool ff;
void dfs(int x2,int y2){
    if(x2==x&&y2==y){
        ff=true;
        return;
    }
    for(int i=0;i<4;i++){
        int ax=x2+dir[i][0],ay=y2+dir[i][1];
        if(f[ax][ay]==0&&vis[ax][ay]==false&&ax>=1&&ax<=m&&ay>=1&&ay<=n){
            vis[ax][ay]=true;
            dfs(ax,ay);
        }
    }
}
int main(){
    cin>>m>>n>>a>>b>>x>>y;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            cin>>f[i][j];
        }
    }
    vis[a][b]=true;
    dfs(a,b);
    if(ff==true)cout<<"yes";
    else cout<<"no";
    return 0;
}


0
已采纳
袁宇泽
袁宇泽
高级守护
高级守护

有可能终点或起点是1

就不满足了

0
我要回答