題意:三維空間,可以走上下左右前后六個方向,求最短路徑,BFS
??
#include<stdio.h>
#include
<queue>
#include
<
string
.h>
using
namespace
std;
const
int
MAXN=
50
;
char
str[MAXN][MAXN][MAXN];
int
step[MAXN][MAXN][MAXN];
int
vis[MAXN][MAXN][MAXN];
int
l,r,c;
struct
Node
{
int
x,y,z;
}s,e;
int
BFS()
{
int
i,j;
Node head,next;
queue
<Node>
Q;
Q.push(s);
step[s.x][s.y][s.z]
=
0
;
while
(!
Q.empty())
{
head
=
Q.front();
Q.pop();
for
(i=
0
;i<
6
;i++
)
{
next
=
head;
if
(i==
0
) next.x-=
1
;
if
(i==
1
) next.x+=
1
;
if
(i==
2
) next.y-=
1
;
if
(i==
3
) next.y+=
1
;
if
(i==
4
) next.z-=
1
;
if
(i==
5
) next.z+=
1
;
if
(!vis[next.x][next.y][next.z] && str[next.x][next.y][next.z]==
1
)
{
vis[next.x][next.y][next.z]
=
1
;
Q.push(next);
step[next.x][next.y][next.z]
=step[head.x][head.y][head.z]+
1
;
if
(next.x==e.x && next.y==e.y && next.z==e.z)
return
step[head.x][head.y][head.z]+
1
;
}
}
}
return
0
;
}
int
main()
{
int
i,j,k;
while
(scanf(
"
%d%d%d
"
,&l,&r,&c)!=
EOF)
{
if
(l==
0
&& r==
0
&& c==
0
)
break
;
memset(vis,
0
,
sizeof
(vis));
memset(str,
0
,
sizeof
(str));
for
(i=
1
; i<=l; i++
)
{
for
(j=
1
; j<=r; j++
)
{
scanf(
"
%s
"
,str[i][j]+
1
);
for
(k=
1
; str[i][j][k]; k++
)
{
if
(str[i][j][k]==
'
#
'
) str[i][j][k]=
0
;
if
(str[i][j][k]==
'
.
'
) str[i][j][k]=
1
;
if
(str[i][j][k]==
'
S
'
)
{
str[i][j][k]
=
1
;
s.x
=
i;
s.y
=
j;
s.z
=
k;
}
if
(str[i][j][k]==
'
E
'
)
{
str[i][j][k]
=
1
;
e.x
=
i;
e.y
=
j;
e.z
=
k;
}
}
}
}
int
ans=
BFS();
if
(ans) printf(
"
Escaped in %d minute(s).\n
"
,ans);
else
printf(
"
Trapped!\n
"
);
}
return
0
;
}
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

