您的位置:首页 > 其它

hdu2102

2016-01-15 00:00 190 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2102

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





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
;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: