Openjudge 2.5 6264:走出迷宫

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Openjudge 2.5 6264:走出迷宫相关的知识,希望对你有一定的参考价值。

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。 
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。

输入
第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符‘.‘表示空地,‘#‘表示墙,‘S‘表示起点,‘T‘表示出口。
输出
输出从起点到出口最少需要走的步数。
样例输入
3 3
S#T
.#.
...
样例输出
6
bfs
屠龙宝刀点击就送

#include <iostream>
#include <cstdlib>

using namespace std;

int ax[4]={0,0,1,-1},ay[4]={1,-1,0,0},a,b,c,d,i,j,n,m;
char mg[101][101];
int print(int p)
{
    cout<<p<<endl;
    exit(0);
}
int ss()
{
    int head=0,tail=1,x,y,f[100*100][4];
    f[tail][1]=a;
    f[tail][2]=b;
    f[tail][3]=1;
    mg[a][b]=#;
    do{
        head++;
        for(i=0;i<4;++i)
        {
            x=f[head][1]+ax[i];y=f[head][2]+ay[i];
            if(x>=0&&x<m&&y>=0&&y<n&&mg[x][y]==.)
            {
                tail++;
                f[tail][1]=x;
                f[tail][2]=y;
                f[tail][3]=f[head][3]+1;
                mg[x][y]=#;
                if(x==c&&y==d)
                {
                    print(f[head][3]);
                    break;
                }
            }
        }
    }while(head<tail);
}
int main()
{
    cin>>n>>m;
    for(i=0;i<n;++i)
    {
        for(j=0;j<m;++j)
        {
            cin>>mg[i][j];
            if(mg[i][j]==S)
            {
                a=i;
                b=j;
                mg[i][j]=.;
            }
            if(mg[i][j]==T)
            {
                c=i;
                d=j;
                mg[i][j]=.;
            }
        }
    }
    ss();
    return 0;
}

以上是关于Openjudge 2.5 6264:走出迷宫的主要内容,如果未能解决你的问题,请参考以下文章

6264:走出迷宫

2-5-6264:走出迷宫

6264:走出迷宫(DFS)

OpenJudge 2.5-1792这绝壁是一道玄学题!DFS

openjudge 1792 迷宫 解析报告

NOI openjudge 1792.迷宫