zoukankan      html  css  js  c++  java
  • 简单的迷宫(bfs)noj1793

    题目描述

    睁开眼睛,Bob发现自己被困在一个迷宫里了,是做梦么…

    不管那么多了,还是先离开为妙。不过由于恐惧,Bob希望找到一条从入口到出口的最短路径,你能帮帮他么?

    这个迷宫相当简单,它是一个N*M的矩形区域,每个格点可以通向相邻上下左右四个格点,起点为(1,1),终点为(N,M)。除此之外,迷宫内还有K个点为障碍点,表示他们不可到达,但障碍点不会出现在起点和终点。


    输入

     

           组数据输入。

    每组数据,第一行N,M,K, 2<=N,M<=50,0<=k<=N*M-2,

    接下来k行,每行两个整数xi,yi,表示第i个障碍物的坐标,障碍物之间不会重复,坐标均1<=xi<=N,1<=yi<=M;

    输出

     

    每组数据输出一个整数,最短路径长度,如果Bob不能到达终点,则输出-1;

    样例输入

    5 5 8
    4 3
    4 5
    5 2
    2 2
    1 5
    3 3
    5 1
    1 4

    5 5 8
    1 2
    2 2
    3 2
    4 2
    2 4
    3 4
    4 4
    5 4

    样例输出

    8
    16

     

    提示

     

    undefined

     

    题目来源

    L.G.

     

     

     

    #include <iostream>
    #include<queue>
    #include<cstring>
    using namespace std;
    int ma[100][100],vis[100][100];
    int dirx[4] = {1,-1,0,0};   //四个方向
    int diry[4] = {0,0,-1,1};
    struct node{
    int x,y,step;
    } ;
    int n,m;
    int bfs(){
    queue<node> p;
    node next,now;
    now.x=1,now.y=1,now.step=0;
    p.push(now);
    while(!p.empty())
    {
        now=p.front();
        p.pop();
        for(int i=0;i<4;i++)
        {
            next=now;
            next.x+=dirx[i];
            next.y+=diry[i];
            next.step++;
            if(next.x==n&&next.y==m)return next.step;
            if(ma[next.x][next.y]&&!vis[next.x][next.y])
            {vis[next.x][next.y]=1;
            p.push(next);
            }
        }

     


    }

     

    return -1;
    }

     

    int main(){
    int  l;
    while(cin>>n>>m>>l)
    {int x,y;
        memset(ma,1,sizeof(ma));
        memset(vis,0,sizeof(vis));
        for(int i=0;i<=n+1;i++)
            ma[i][0]=ma[i][m+1]=0;
        for(int i=0;i<=m+1;i++)
            ma[0][i]=ma[n+1][i]=0;
        for(int i=0;i<l;i++)
        {cin>>x>>y;
             ma[x][y]=0;
        }

     

       cout<< bfs()<<endl;

     

    }

     

    return 0;}

     

     

  • 相关阅读:
    iozone
    2019-11-23-WPF-使用-RawInput-接收裸数据
    2019-11-22-Roslyn-在多开发框架让-msbuild-的-Target-仅运行一次
    2019-3-1-C#-json-转-xml-字符串
    2018-11-19-visualStudio-无法登陆
    2019-4-21-Roslyn-通过-NuGet-库修改应用程序入口函数
    2019-8-31-dotnet-core-集成到-Mattermost-聊天工具
    2019-7-29-win10-UWP-使用-MD5算法
    2018-8-10-C#-TimeSpan-时间计算
    2019-6-15-WPF-触摸到事件
  • 原文地址:https://www.cnblogs.com/lengxia/p/4469725.html
Copyright © 2011-2022 走看看