C语言写的,其他的函数都省略了,board初始化为-2,可以走的初始化为-1
void Navigate(int board[N][M], queue* q, int x, int y)
{
board[x][y] = 0;
int pos[] = { x,y };
int map[N][M] = { 0 };
PUSH(q, pos);
map[x][y] = 1;
int tmp[] = { x,y };
while (!IsEmpty(q))
{
pos[0] = TOP(q)[0];
pos[1] = TOP(q)[1];
POP(q);
int i;
for (i = 1;i <= 8;i++)
{
Move(tmp, i);
if (board[tmp[0]][tmp[1]] != -2 && map[tmp[0]][tmp[1]] != 1)
{
PUSH(q, tmp);
board[tmp[0]][tmp[1]] = board[pos[0]][pos[1]] + 1;
map[tmp[0]][tmp[1]] = 1;
}
tmp[0] = pos[0];
tmp[1] = pos[1];
}
}
}