sicily 1005. 无路可逃?

Description
唐僧被妖怪关在迷宫中。孙悟空好不容易找到一张迷宫地图,并通过一个魔法门来到来到迷宫某个位置。假设迷宫是一个n*m的矩阵,它有两种地形,1表示平地,0表示沼泽,孙悟空只能停留在平地上。孙悟空目前的位置在坐标(sx,sy)处,他可以向上下左右四个方向移动。
请你帮助孙悟空计算一下,迷宫中是否存在一条路从他所在位置(sx,sy)到达唐僧所在位置(tx,ty)?

Input
输入第一行为一个整数t(0< t<=10),表示测试用例个数。
每个测试样例的第1行是2个正整数n (1≤n≤100),m (1≤n≤100),表示迷宫是n*m的矩阵。接下来的n行输入迷宫,每行有m个数字(0或者1),数字之间用一个空格间隔。
接下来的1行是4个整数sx,sy,tx,ty,1≤sx,tx≤n,1≤sy,ty≤m,表示孙悟空所在位置为第sx行第sy列,唐僧所在位置为第tx行第tx列。迷宫左上角编号是(1,1),右下角编号是(n, m)。
数据保证(sx,sy)格和(tx,ty)必定为平地。

Output
每个样例单独输出一行:1表示路径存在,0表示路径不存在。

#include<iostream>
#include<queue>
#include<memory.h>
using namespace std;

struct point{
    int x;
    int y;
    point(int x,int y){
        this->x=x;
        this->y=y;
    }
    point(){
    }
};

bool visited[101][101];
int maze[101][101];


void bfs(int sx,int sy);

int main(){
    int t;
    cin>>t;
    while(t--){
        memset(visited,0,sizeof(visited));
        memset(maze,0,sizeof(maze));
        int n,m,sx,sy,tx,ty;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            cin>>maze[i][j]; 
        }
        cin>>sx>>sy>>tx>>ty;

        bfs(sx,sy);
        if(visited[tx][ty]==1){
            cout<<1<<endl;
        }
        else
        cout<<0<<endl;

    }


    return 0;
}

int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
void bfs(int sx,int sy){
    queue<point> q;
    q.push(point(sx,sy));
    visited[sx][sy]=true;
    while(!q.empty()){
        point temp,temp_a;
        temp=q.front();
        q.pop();
        for(int i=0;i<4;i++ ){
        temp_a.x=temp.x+dx[i];
        temp_a.y=temp.y+dy[i];  
        if(!visited[temp_a.x][temp_a.y] && maze[temp_a.x][temp_a.y]==1 &&temp_a.x>=1 && temp_a.y>=1){
            visited[temp_a.x][temp_a.y]=true;
            q.push(temp_a);
        }
        }

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值