zoukankan      html  css  js  c++  java
  • sdf 2439 问题 A: 迷宫(广搜模板题)

    问题 A: 迷宫(广搜模板题)

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 203  解决: 63
    [提交][状态][讨论版]

    题目描述

    现在有一个N×N的地图,问从起点(sx,sy)到(tx,ty)最少要走几步。

    输入

    第一行一个正整数N。

    接下来N行,每行N个字符,表示N×N的0/1矩阵,1表示不能通过。0表示可以通过。

    最后一行四个整数sx,sy,tx,ty.

    输出

    仅有一个数,表示答案。

    样例输入

    5
    01111
    00111
    10001
    11101
    11100
    1 1 5 5

    样例输出

    8


    #include<cstdio>

    #include<cstring>
    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<queue>
    using namespace std;

    int n;
    const int MAXN=1000;
    int a[MAXN][MAXN];//存地图
    int vis[MAXN][MAXN];//存标记
    int dir[4][2] = {
        { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 }
    };

    struct node {
        int x;
        int y;
        int len;
    };

    int sx,sy,tx,ty;

    int bfs(int i, int j)
    {
        queue<node> q;
        //找到一个队列头
        vis[i][j]=1;
        q.push({i, j, 0});

        //所有相关的全部入队搜索
        while(!q.empty())
        {
            auto f=q.front();
            q.pop();
            //找到
            if(f.x==tx && f.y==ty)
                return f.len;

            int nx,ny,nlen;
            for(int k=0;k<4;k++)
            {
                nx=f.x+dir[k][0];
                ny=f.y+dir[k][1];
                nlen=f.len+1;
                if(nx<0 || nx>=n || ny<0 || ny>=n)
                    continue;
                if(a[nx][ny]==0 && !vis[nx][ny])
                {
                    vis[nx][ny]=1;
                    q.push({nx, ny, nlen});
                }
            }
        }
        //没找到
        return -1;
    }

    int main()
    {  
        cin>>n;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
            {
                char c;
                cin>>c;
                a[i][j]=c-'0';
            }
        cin>>sx>>sy>>tx>>ty;
        sx--;sy--;tx--;ty--;//坐标偏移1

        int len = bfs(sx,sy);
        cout<<len<<endl;

        return 0;
    }



  • 相关阅读:
    PHP获取今天、昨天、明天的日期
    PHP使用Apache中的ab测试网站的压力性能
    php 数组操作
    ajax实时获取下拉数据
    php微信支付测试开发(流程已通)
    微信支付调用JSAPI缺少参数:timeStamp
    JS dom最常用API
    Javascript刷新页面的几种方法
    php+mysql 安全
    隐式的类类型转换
  • 原文地址:https://www.cnblogs.com/cute/p/15424740.html
Copyright © 2011-2022 走看看