台州3128 简单版贪吃蛇 bfs保存路径 解题报告

3128: 简单版贪吃蛇 

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte
总提交: 526            测试通过:164 Special Judge

描述

现在我们来简化蛇的身体,假设初始化的时候蛇的身体只有一个头而已(呵,当然是假设的),那么蛇去吃食物的时候就不必考虑碰到自己的身体了。
例:

5 5
.....
S....
###.#
E....
#####

那么从S到E最短的走法是EEESSWWW。说明:N(north),S(south),W(west),E(east)。如果吃不到食物就输出Can't eat it!
注意:路径是最短的走的。

输入

输入数据有多组,每组输入的第一行是两个正整数R,C,表示行和列,3=<R,C<=100,下面输入R行C列的矩阵。

输入保证合法。

输出

每行输出最短的走法。

样例输入

5 5 ..... S.... ###.# E.... #####

样例输出

EEESSWWW


分析:很简单的bfs,关键是要输出路径,每个节点存储之前走过的路径即可。

代码:

#include <cstring>
#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;
int n,m,dir[4][2]= {-1,0,1,0,0,-1,0,1};
int vis[200][200],ex,ey,sx,sy,flag;
char map[200][200];
struct node
{
    int x;
    int y;
    char c[101];
};
void bfs(int x,int y)
{
    node a,p,b;
    int i;
    vis[x][y]=1;
    a.x=x;
    a.y=y;
    memset(a.c,'\0',sizeof(a.c));
    queue<node>Q;
    Q.push(a);
    while(!Q.empty())
    {
        b=Q.front();
        Q.pop();
        if(map[b.x][b.y]=='E')
        {
            flag=1;
            printf("%s\n",b.c);
            return ;
        }
        for(i=0; i<4; i++)
        {
            p=b;
            p.x=p.x+dir[i][0];
            p.y=p.y+dir[i][1];
            if(map[p.x][p.y]!='#'&&p.x>=0&&p.y>=0&&p.x<n&&p.y<m&&vis[p.x][p.y]==0)
            {
                vis[p.x][p.y]=1;
                if(i==0) strcat(p.c,"N");
                if(i==1) strcat(p.c,"S");
                if(i==2) strcat(p.c,"W");
                if(i==3) strcat(p.c,"E");
                Q.push(p);
            }
        }
    }
}
int main()
{
    int i,j;
    while(cin>>n>>m)
    {
        memset(vis,0,sizeof(vis));
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
            {
                cin>>map[i][j];
                if(map[i][j]=='S')
                {
                    sx=i;
                    sy=j;
                }
            }
        flag=0;
        bfs(sx,sy);
        if(flag==0)
            printf("Can’t eat it!\n");
    }
    return 0;
}


你可能感兴趣的:(搜索,ACM,bfs)