[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};
const int fy[]={1,-1,0,0};

int bfs()
{
    memset(vis,false,sizeof(vis));
    queue< pair<int,int> > q;
    while (!q.empty()) q.pop();
    q.push(make_pair(0*10000+1*100+1,0));
    vis[0][1][1]=true;
    while (!q.empty())
    {
        int layer=q.front().first/10000;
        int x=q.front().first%10000/100;
        int y=q.front().first%100;
        int st=q.front().second;
        q.pop();
        for (int i=0;i<4;i++)
        {
            int xx=x+fx[i];
            int yy=y+fy[i];
            if (s[layer][xx][yy]!=‘*‘ && !vis[layer][xx][yy])
            {
                if (s[layer][xx][yy]==‘P‘ || (s[layer][xx][yy]==‘#‘ && s[layer^1][xx][yy]==‘P‘)) return st+1;
                if (s[layer][xx][yy]==‘#‘ && !vis[layer^1][xx][yy])
                {
                    vis[layer][xx][yy]=vis[layer^1][xx][yy]=true;
                    q.push(make_pair((layer^1)*10000+xx*100+yy,st+1));
                }
                if (s[layer][xx][yy]==‘.‘ || s[layer][xx][yy]==‘S‘)
                {
                    vis[layer][xx][yy]=true;
                    q.push(make_pair(layer*10000+xx*100+yy,st+1));
                }
            }
        }
    }
    return INF+INF;
}

int main()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        memset(s,‘*‘,sizeof(s));
        int n,m,t;
        cin >>n >>m >>t;
        for (int _=0;_<2;_++)
            for (int i=1;i<=n;i++)
                for (int j=1;j<=m;j++)
                    cin >>s[_][i][j];
        for (int i=1;i<=n;i++)
            for (int j=1;j<=m;j++)
                if (s[0][i][j]==‘#‘&&s[1][i][j]==‘#‘ || s[0][i][j]==‘#‘&&s[1][i][j]==‘*‘ || s[0][i][j]==‘*‘&&s[1][i][j]==‘#‘) s[0][i][j]=s[1][i][j]=‘*‘;
        if (bfs()<=t) cout <<"YES" <<endl;
        else cout <<"NO" <<endl;
    }
    return 0;
}
时间: 2024-08-01 22:42:58

[hdu 2102]bfs+注意INF的相关文章

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

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时刻吃掉公主,由于他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下勇士来解救公主.只是公主早已习以为常,她

hdu 1175 bfs 转弯题

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

A计划 HDU - 2102

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

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