#include<stdio.h>
#include<stdlib.h>
#define SIZE 10000000
#pragma warning(disable:4996)
int data[26][26] = { 0 };
int visit[26][26][26][26] = { 0 };
int dx[9] = {-1,-1,-1,0,0,0,1,1,1};
int dy[9] = {-1,0,1,-1,0,1,-1,0,1};
int dx1[8] = { -1, 0, 1, 0, -1, -1, 1, 1 };
int dx2[8] = { 0, 1, 0, -1, -1, 1, -1, 1 };
int x1, y1, x2, y2;
int d1, d2, d3, d4;
int bushu;
int case1;
int hang, lie;
int cishu = 0;

typedef struct node{
int x1;
int y1;
int x2;
int y2;
int step;
}node;
node point[SIZE];
void shuchu()
{


}
void puanduan(int i,int j,int n){
if (n == 1)
{
x1 = i;
y1 = j;
}
if (n == 2)
{
x2 = i;
y2 = j;
}
if (n == 3)
{
d1 = i;
d2 = j;
}
if (n == 4)
{
d3 = i;
d4 = j;
}
}
int xianglin(int x1,int y1,int x2,int y2)
{

for (int i = 0; i < 9; i++)
{
int nx = x1 + dx[i];
int ny = y1 + dy[i];
if (nx >= 0 && nx < hang&&ny >= 0 && ny < lie)
{
if (nx == x2&&ny == y2)
{
return 0;
}
}
}
return 1;

}
void bfs()
{
int head = 0;
int wei = 1;
point[head].x1 = x1; //T A x
point[head].y1 = y1; //T A Y
point[head].x2 = x2;
point[head].y2 = y2;
visit[x1][y1][x2][y2] = 1;
point[head].step = 0;

while (head < wei)
{
//printf("sss\n");
int flag = 0;
if (point[head].x1 == d1&&point[head].y1 == d2&&
point[head].x2 == d3&&point[head].y2 == d4)
{
printf("jieshu");
flag = 1;
bushu = point[head].step;

}
if (flag)
break;
for (int i = 0; i < 9; i++)
{
int nx1 = point[head].x1 + dx[i];
int ny1 = point[head].y1 + dy[i];
int step = point[head].step;

if (nx1 >= 0 && nx1 < hang && ny1 >= 0 && ny1 < lie &&data[nx1][ny1]!=-1)
{
for (int j = 0; j < 9; j++)
{
int nx2 = point[head].x2 + dx[j];
int ny2 = point[head].y2 + dy[j];

if (nx2 >= 0 && nx2 < hang && ny2 >= 0 && ny2 < lie && xianglin(nx1, ny1, nx2, ny2) &&
data[nx2][ny2]!=-1&&visit[nx1][ny1][nx2][ny2]==0)
{
point[wei].x1 = nx1;
point[wei].y1 = ny1;
point[wei].x2 = nx2;
point[wei].y2 = ny2;
point[wei].step = step+1;
visit[nx1][ny1][nx2][ny2] = 1;
wei++;
//shuchu();
}

}
}

}
head++;

}
}
int main()
{
freopen("input.txt", "r", stdin);
scanf("%d", &case1);
scanf("%d %d", &hang, &lie);
for (int i = 0; i < hang; i++)
{
for (int j = 0; j < lie; j++)
{
scanf("%d", &data[i][j]);
puanduan(i, j, data[i][j]);

}
}
bfs();

printf("#1 %d", bushu);

}

#include<stdio.h>
#include<stdlib.h>
#define SIZE 10000000
#pragma warning(disable:4996)
int data[26][26] = { 0 };
int visit[26][26][26][26] = { 0 };
int dx[9] = {-1,-1,-1,0,0,0,1,1,1};
int dy[9] = {-1,0,1,-1,0,1,-1,0,1};
int dx1[8] = { -1, 0, 1, 0, -1, -1, 1, 1 };
int dx2[8] = { 0, 1, 0, -1, -1, 1, -1, 1 };
int x1, y1, x2, y2;
int d1, d2, d3, d4;
int bushu;
int case1;
int hang, lie;
int cishu = 0;

typedef struct node{
int x1;
int y1;
int x2;
int y2;
int step;
}node;
node point[SIZE];
void shuchu()
{


}
void puanduan(int i,int j,int n){
if (n == 1)
{
x1 = i;
y1 = j;
}
if (n == 2)
{
x2 = i;
y2 = j;
}
if (n == 3)
{
d1 = i;
d2 = j;
}
if (n == 4)
{
d3 = i;
d4 = j;
}
}
int xianglin(int x1,int y1,int x2,int y2)
{

for (int i = 0; i < 9; i++)
{
int nx = x1 + dx[i];
int ny = y1 + dy[i];
if (nx >= 0 && nx < hang&&ny >= 0 && ny < lie)
{
if (nx == x2&&ny == y2)
{
return 0;
}
}
}
return 1;

}
void bfs()
{
int head = 0;
int wei = 1;
point[head].x1 = x1; //T A x
point[head].y1 = y1; //T A Y
point[head].x2 = x2;
point[head].y2 = y2;
visit[x1][y1][x2][y2] = 1;
point[head].step = 0;

while (head < wei)
{
//printf("sss\n");
int flag = 0;
if (point[head].x1 == d1&&point[head].y1 == d2&&
point[head].x2 == d3&&point[head].y2 == d4)
{
printf("jieshu");
flag = 1;
bushu = point[head].step;

}
if (flag)
break;
for (int i = 0; i < 9; i++)
{
int nx1 = point[head].x1 + dx[i];
int ny1 = point[head].y1 + dy[i];
int step = point[head].step;

if (nx1 >= 0 && nx1 < hang && ny1 >= 0 && ny1 < lie &&data[nx1][ny1]!=-1)
{
for (int j = 0; j < 9; j++)
{
int nx2 = point[head].x2 + dx[j];
int ny2 = point[head].y2 + dy[j];

if (nx2 >= 0 && nx2 < hang && ny2 >= 0 && ny2 < lie && xianglin(nx1, ny1, nx2, ny2) &&
data[nx2][ny2]!=-1&&visit[nx1][ny1][nx2][ny2]==0)
{
point[wei].x1 = nx1;
point[wei].y1 = ny1;
point[wei].x2 = nx2;
point[wei].y2 = ny2;
point[wei].step = step+1;
visit[nx1][ny1][nx2][ny2] = 1;
wei++;
//shuchu();
}

}
}

}
head++;

}
}
int main()
{
freopen("input.txt", "r", stdin);
scanf("%d", &case1);
scanf("%d %d", &hang, &lie);
for (int i = 0; i < hang; i++)
{
for (int j = 0; j < lie; j++)
{
scanf("%d", &data[i][j]);
puanduan(i, j, data[i][j]);

}
}
bfs();

printf("#1 %d", bushu);

}

 

 

 

1
14 18
-1 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 3
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 2