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

hdu 2102

时间:2014-11-22 11:59:53      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:des   blog   http   io   ar   os   sp   for   strong   

D - A计划
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

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

Input

输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。
 

Output

如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。
 

Sample Input

1 5 5 14 S*#*. .#... ..... ****. ...#. ..*.P #.*.. ***.. ...*. *.#..
 

Sample Output

YES
 
 
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
using namespace std;
int t,n,m,T;
char a[2][30][30];
int dic[4][2]={{1,0},{-1,0},{0,1},{0,-1}},mark[2][30][30];
struct node
{
      int x,i,j,time;
}p,d;
queue<node> q;
bool check(int x,int y)
{
      if(x<0||y<0||x>n||y>m)
            return false;
      return true;
}
void bfs()
{
    p.x=0,p.i=0,p.j=0,p.time=0;
    q.push(p);
    mark[0][0][0]=1;
    while(!q.empty())
    {
          d=q.front();
          q.pop();
          for(int i=0;i<4;i++)
          {
               p.i=d.i+dic[i][0];
               p.j=d.j+dic[i][1];
               p.x=d.x;
               if(a[p.x][p.i][p.j]!=‘*‘&&check(p.i,p.j)&&!mark[p.x][p.i][p.j])
               {
                     if(a[p.x][p.i][p.j]==‘#‘)
                     {
                          mark[p.x][p.i][p.j]=1;
                          if(p.x) p.x=0;
                          else p.x=1;
                     }
                     mark[p.x][p.i][p.j]=1;
                     p.time=d.time+1;
                     if(p.time>T)
                     {
                           printf("NO\n");
                           return;
                     }
                     if(a[p.x][p.i][p.j]==‘P‘)
                     {
                           printf("YES\n");
                           return ;
                     }
                     q.push(p);
               }
          }
    }
    printf("NO\n");
}
int main()
{
      scanf("%d",&t);
      while(t--)
      {
            memset(mark,0,sizeof(mark));
            while(!q.empty()) q.pop();
            scanf("%d%d%d",&n,&m,&T);
            for(int x=0;x<2;x++)
                  for(int i=0;i<n;i++)
                        for(int j=0;j<m;j++)
                              cin>>a[x][i][j];
                  for(int i=0;i<n;i++)
                        for(int j=0;j<m;j++)
                        {
                              if((a[0][i][j]==‘*‘)&&a[1][i][j]==‘#‘)
                                    a[1][i][j]=‘*‘;
                              else if((a[0][i][j]==‘#‘)&&a[1][i][j]==‘*‘)
                                    a[0][i][j]=‘*‘;
                              else if((a[0][i][j]==‘#‘)&&a[1][i][j]==‘#‘)
                                    a[0][i][j]=a[1][i][j]=‘*‘;
                        }
            bfs();
      }
      return 0;
}

  

hdu 2102

标签:des   blog   http   io   ar   os   sp   for   strong   

原文地址:http://www.cnblogs.com/a972290869/p/4114876.html

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