码迷,mamicode.com
首页 > 其他好文 > 详细

Openjudge 2.5 6264:走出迷宫

时间:2017-03-03 22:29:09      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:clu   接下来   for   content   std   nbsp   布局   log   return   

总时间限制: 
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:走出迷宫

标签:clu   接下来   for   content   std   nbsp   布局   log   return   

原文地址:http://www.cnblogs.com/ruojisun/p/6498438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!