hdu 2102 BFS

http://acm.hdu.edu.cn/showproblem.php?pid=2102

#include "map"
#include "queue"
#include "math.h"
#include "stdio.h"
#include "string.h"
#include "iostream"
#include "algorithm"
#define abs(x) x > 0 ? x : -x
#define max(a,b) a > b ? a : b
#define min(a,b) a < b ? a : b

using namespace std;

int di[6][3] = {{0,0,1},{0,1,0},{0,0,-1},{0,-1,0},{1,0,0},{-1,0,0}};
int Map[5][15][15];
bool vis[5][15][15];
int t;

struct Node
{
    int zz,xx,yy;
    int step;
};

void Bfs()
{
    memset(vis,0,sizeof(vis));
    queue<Node>Q;
    Node now,next;
    int l,r;

    now.zz=1;
    now.xx=1;
    now.yy=1;
    now.step=0;
    vis[1][1][1] = 1;

    Q.push(now);

    while(!Q.empty())
    {
        now = Q.front();
        Q.pop();

        if(Map[now.zz][now.xx][now.yy]==3)
        {
            if(now.step<=t)
                printf("YES\n");
            else
                printf("NO\n");
            return;
        }
        if(Map[now.zz][now.xx][now.yy]==2)
            l=4,r=6;
        if(Map[now.zz][now.xx][now.yy]==1)
            l=0,r=4;

            for(int i=l; i<r; i++)
            {
                next.zz = now.zz + di[i][0];
                next.xx = now.xx + di[i][1];
                next.yy = now.yy + di[i][2];
                next.step = now.step + 1;
                if(i==4||i==5)
                    next.step = now.step;

                if(Map[next.zz][next.xx][next.yy]!=0)
                {
                    if(!vis[next.zz][next.xx][next.yy])
                    {
                        vis[next.zz][next.xx][next.yy] = 1;
                        Q.push(next);
                    }
                }
            }
    }
    printf("NO\n");
}

int main()
{
    int c,n,m,i,j,k;
    char s;
    scanf("%d",&c);
    while(c--)
    {
        memset(Map,0,sizeof(Map));
        scanf("%d%d%d",&n,&m,&t);
        for(i=1; i<=2; i++)
        {
            for(j=1; j<=n; j++)
            {
                getchar();
                for(k=1; k<=m; k++)
                {
                    scanf("%c",&s);
                    if(s==‘S‘||s==‘.‘)
                        Map[i][j][k] = 1;
                    if(s==‘P‘)
                        Map[i][j][k] = 3;
                    if(s==‘#‘)
                        Map[i][j][k] = 2;
                    if(s==‘*‘)
                        Map[i][j][k] = 0;
                }
            }
            getchar();
        }
         //for(i=1; i<=2; i++){for(j=1; j<=n; j++) {for(k=1; k<=m; k++) printf("%d",Map[i][j][k]); printf("\n"); }printf("\n"); }
        Bfs();
    }
    return 0;
}
时间: 2024-10-17 06:39:49

hdu 2102 BFS的相关文章

[hdu 2102]bfs+注意INF

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 感觉这个题非常水,结果一直WA,最后发现居然是0x3f3f3f3f不够大导致的--把INF改成INF+INF就过了. #include<bits/stdc++.h> using namespace std; bool vis[2][15][15]; char s[2][15][15]; const int INF=0x3f3f3f3f; const int fx[]={0,0,1,-1};

hdu 2102 A计划(双层BFS)(详解)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下勇士来拯救公主.不过公主早已习以为常,她

hdu 2102 A计划 (bfs+队列)

A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9360    Accepted Submission(s): 2265 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.

HDU 2102 A计划 双层BFS

Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下勇士来拯救公主.不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出. 现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示.骑士们一进入时空传输机就会被转到另一层的相对位

hdu 2102 A计划(双层BFS)(具体解释)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,由于他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下勇士来解救公主.只是公主早已习以为常,她

A计划 HDU - 2102

A计划  HDU - 2102 题目链接:https://vjudge.net/problem/HDU-2102 题目: 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下勇士来拯救公主.不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出. 现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机

hdu 1175 bfs 转弯题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 和之前的1728类似.就是判断转弯数,建立一个用于记录转弯数的数组.. 还有就是对于特殊情况要进行考虑,比如起点与终点相同的情况,对于本题来说是不可以消去的应该输出NO.还有就是起点或终点是零这也是不行的,因为0代表没有棋子... 还有在判断能不能走的时候要小心,对于判断条件一定要小心,不要图赶快写.. 错误的地方都写在注释中了.. 代码: // hdu 1175 bfs 转弯数 //1.起点

Saving Princess claire_(hdu 4308 bfs模板题)

http://acm.hdu.edu.cn/showproblem.php?pid=4308 Saving Princess claire_ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2305    Accepted Submission(s): 822 Problem Description Princess claire_ wa

HDU 1072 bfs

Nightmare Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7083    Accepted Submission(s): 3409 Problem Description Ignatius had a nightmare last night. He found himself in a labyrinth with a tim