题目描述:
不描述。
解题报告:
很早就过这道题目了,但是昨天的多校联合集训中1004是一个用双向广搜解决的八数码问题,没有做出来,特此来练习一下双广。
代码很短:
#include<iostream>
using namespace std;
int vst[300][300][2], pos[2][2];
int move[8][2] = {2, 1, 2, -1, -2, 1, -2, -1, 1, -2, 1, 2, -1, -2,
-1, 2};
struct jeo
{
int x,
y;
}que[300 * 350][2];
int main()
{
int
t;scanf("%d", &t);
for(int i =
0; i < t; i++)
{
int l; scanf("%d", &l); int ans = 0;
memset(vst, 0, sizeof(vst));
int head[2], tail[2]; head[0] = head[1] = tail[0] = tail[1] =
0;
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++) scanf("%d",
&pos[i][j]);
vst[pos[i][0]][pos[i][1]][i] = 1;
que[tail[i]][i].x = pos[i][0], que[tail[i]++][i].y =
pos[i][1];
}
if (pos[0][0] == pos[1][0] &&
pos[0][1] == pos[1][1]) goto lable;
while(head[0] < tail[0]
&& head[1] <
tail[1])
for(int i = 0; i < 2; i++)
{
jeo jeogia = que[head[i]++][i];
for(int j = 0; j < 8; j++)
{
int a = jeogia.x + move[j][0], b = jeogia.y + move[j][1];
if (a >= 0 && a
< l && b
>= 0 && b
< l &&
!vst[a][b][i])
{