首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

HOJ 2979 Escape from Pyramids -BFS求最小的步数

2013-01-28 
HOJ 2979 Escape from Pyramids--------BFS求最小的步数HOJ 2979 Escape from Pyramids#include iostream

HOJ 2979 Escape from Pyramids --------BFS求最小的步数

HOJ 2979 Escape from Pyramids

#include <iostream>#include <stdio.h>#include <cstring>#include <queue>using namespace std;bool vis[101][101];char map[101][101];int dx[]= {-1,-1,0,0,1,1};int dy[]= {-1,0,-1,1,0,1};int T,n;struct point{    int x,y,t;};int main(){    char c;    int cases=1;    int tmp=0;    while(scanf("%d%d",&n,&T)==2)    {        if(tmp==1)  printf("\n");        tmp=1;        memset(vis,false,sizeof(vis));        point start;        queue<point> v;        for(int i=1; i<=n; i++)        {            for(int j=1; j<=i; j++)            {                scanf(" %c",&c);                map[i][j]=c;                if(c=='S')                {                    start.x=i;                    start.y=j;                    start.t=0;                    vis[i][j]=true;                }            }        }        v.push(start);        int ans=10000000;        while(!v.empty())        {            point cur,pre;            pre=v.front();            if(map[pre.x][pre.y]=='D')            {                ans=pre.t;                break;            }            v.pop();            for(int i=0; i<6; i++)            {                cur.x=pre.x+dx[i];                cur.y=pre.y+dy[i];                if(cur.x>0&&cur.x<=n&&cur.y>0&&cur.y<=cur.x&&!vis[cur.x][cur.y]&&map[cur.x][cur.y]!='*')                {                    cur.t=pre.t+1;                    vis[cur.x][cur.y]=true;                    v.push(cur);                }            }        }        printf("Maze #%d :\n",cases++);        if(ans>T) printf("Oh No, I'm afraid that you don't have enough time to escape!\n");        else if(ans==1)   printf("Hurry up, You need 1 minute to escape!\n");        else printf("Hurry up, You need %d minutes to escape!\n",ans);    }    return 0;}



热点排行