hdu2102

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

复习了一遍队列,借鉴了网上的一些不错的方法,学习了!

ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
#include < iostream >
#include
< cstdio >
#include
< queue >
#define M 11
using namespace std;
char map[ 2 ][M][M];
int set [ 2 ][M][M];
int Dir[ 4 ][ 2 ] = {{ 1 , 0 },{ 0 , 1 },{ - 1 , 0 },{ 0 , - 1 }};
int n,m,t;
int mx,my,mz;
int i,j,k;

struct Maze
{
int x,y,z;
int step;
};

Maze P , S;

void Init()
{
for (i = 0 ; i < 2 ; ++ i)
for (j = 0 ; j < n; ++ j)
for (k = 0 ; k < m; ++ k)

set [i][j][k] = 0x7fffffff ;
set [ 0 ][ 0 ][ 0 ] = 0 ;
}
void BFS()
{
queue
< Maze > Q;

P.x
= 0 ;
P.y
= 0 ;
P.z
= 0 ;
P.step
= 0 ;
Q.push(P);
Init();

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

if (P.x == mx && P.y == my && P.z == mz && P.step <= t)
{
printf(
" YES\n " );
return ;
}

for ( i = 0 ; i < 4 ; ++ i)
{
S
= P;
S.x
= S.x + Dir[i][ 0 ];
S.y
= S.y + Dir[i][ 1 ];
S.step
++ ;

if (S.x >= 0 && S.y >= 0 && S.x < n && S.y < m && map[S.z][S.x][S.y] != ' * ' && S.step <= t)
{
if (map[S.z][S.x][S.y] == ' # ' )
{
S.z
= ( ! S.z);
if (map[S.z][S.x][S.y] != ' * ' )
{
if (map[S.z][S.x][S.y] != ' # ' && set [S.z][S.x][S.y] >= S.step)
{
set [S.z][S.x][S.y] = S.step;
Q.push(S);
}
}
}
else
{
if ( set [S.z][S.x][S.y] >= S.step)
{
set [S.z][S.x][S.y] = S.step;
Q.push(S);
}
}
}
}
}
printf(
" NO\n " );
}


int main()
{
int ii,jj,kk;
int w;
scanf(
" %d " , & w);
while (w -- )
{
scanf(
" %d%d%d " , & n, & m, & t);

for (ii = 0 ; ii < 2 ; ++ ii)
{
for (jj = 0 ; jj < n ; ++ jj )
{
scanf(
" %s " , & map[ii][jj]);

for (kk = 0 ; kk < m ; ++ kk )
{
if (map[ii][jj][kk] == ' P ' )
{
mz
= ii;mx = jj;my = kk;
}
}
}
}
BFS();
}
return 0 ;
}

转载于:https://www.cnblogs.com/FCWORLD/archive/2011/04/25/2028639.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值