#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
/*
思路: 当遇到4时,只走一次, 广搜就行了;
*/
int num[10][10];
struct node
{
int x, y;
int t;
int step;
};
int T, n, m;
int sx, sy;
int ex, ey;
int ans;
int dir[][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
bool judge(int x, int y)
{
if(x >= 1 && x <= n && y >= 1 && y <= m && num[x][y] != 0)
return true;
return false;
}
void bfs()
{
node cur, next;
cur.x = sx;
cur.y = sy;
cur.t = 6;
cur.step = 0;
queue<node> que;
que.push(cur);
while(!que.empty())
{
cur = que.front();
que.pop();
if(cur.x == ex && cur.y == ey)
{
ans = cur.step;
break;
}
for(int i = 0; i < 4; i++)
{
int a = cur.x + dir[i][0];
int b = cur.y + dir[i][1];
if(judge(a, b)&& cur.t > 1)
{
next.x = a;
next.y = b;
next.step = cur.step + 1;
next.t = cur.t - 1;
if(num[a][b] == 4)
{
num[a][b] = 0;
next.t = 6;
}
que.push(next);
}
}
}
}
int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
scanf("%d", &num[i][j]);
if(num[i][j] == 2)
{
sx = i;
sy = j;
}
if(num[i][j] == 3)
{
ex = i;
ey = j;
}
}
}
ans = -1;
bfs();
printf("%d\n", ans);
}
return 0;
}
hdu 1072 Nightmare
最新推荐文章于 2018-10-18 23:00:53 发布