HDU_1253 대탈출 승리(BFS)
15624 단어 HDU
My Code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 51;
struct node
{
int x;
int y;
int z;
int t;
}q[N*N*N];
int d[6][3] = {{1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, -1}, {0, 0, 1}};
int map[N][N][N];
int ans, T, X, Y, Z;
int bfs()
{
int f = 0, r = 0, i;
node p;
map[0][0][0] = 1;
q[0].x = 0; q[0].y = 0;
q[0].z = 0; q[0].t = 0;
while(f <= r)
{
p = q[f++];
for(i = 0; i < 6; i++)
{
int a = p.x + d[i][0];
int b = p.y + d[i][1];
int c = p.z + d[i][2];
if(a >= 0 && a < X && b >= 0 && b < Y && c >= 0 && c < Z && !map[a][b][c])
{
if(a == X-1 && b == Y-1 && c == Z-1 && p.t+1 <= T)
{
ans = p.t + 1;
return 1;
}r++;
map[a][b][c] = 1;
q[r].x = a;
q[r].y = b;
q[r].z = c;
q[r].t = p.t+1;
}
}
}
return 0;
}
int main()
{
//freopen("data.in", "r", stdin);
int t, i, j, k;
scanf("%d", &t);
while(t--)
{
scanf("%d%d%d%d", &X, &Y, &Z, &T);
memset(map, 0, sizeof(map));
for(i = 0; i < X; i++)
for(j = 0; j < Y; j++)
for(k = 0; k < Z; k++)
scanf("%d", &map[i][j][k]);
ans = 0;
if(bfs())
printf("%d
", ans);
else
printf("-1
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HDU] 4089 활성화 확률 DPdp[i][j]를 모두 i개인의 대기열인 Tomato가 j위 서버가 마비될 확률로 역추를 사용하면 우리는 상태 이동 방정식을 얻을 수 있다. i == 1 : dp[1][1] = dp[1][1] * p1 + dp[1]...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.