5
5 5
0 1 0 0 0
0 0 0 0 0
0 2 0 9 0
0 0 0 0 0
0 9 -1 0 -2
4 6
-1 -2 1 0 9 0
0 2 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
7 4
0 0 0 0
0 0 0 9
2 0 1 0
0 0 9 0
0 9 0 0
0 0 0 0
-1 0 -2 0
4 7
0 0 0 0 0 0 0
0 0 1 9 0 0 0
0 0 0 0 0 0 0
9 2 -1 9 0 0 -2
10 10
0 0 0 0 0 0 0 9 -1 0
0 9 -2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 9
0 0 0 9 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 9 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 9 9
9 0 0 0 0 0 9 0 0 0
#include<stdio.h>
#include<stdlib.h>
int row,col;
int data[12][12] = {0};
int Dx[4] = {1,-1,0,0};//下,上,左,右
int Dy[4] = {0,0,-1,1};
int sox,soy;
int stx,sty;
int eox,eoy;
int etx,ety;
int min = 8;
bool ret = false;
void DFS(int ox,int oy,int tx,int ty,int step,int I);
int main()
{
for(int i = 0;i < 12;i++)
{
for(int j = 0;j < 12;j++)
{
data[i][j] = 9;
}
}
int n;
freopen("qipanhuakuai.txt","r",stdin);
scanf("%d",&n);
for(int t = 0;t < n;t++)
{
scanf("%d",&row);
scanf("%d",&col);
for(int i = 1;i <= row;i++)
{
for(int j = 1;j <= col;j++)
{
scanf("%d",&data[i][j]);
if(data[i][j] == 1){
sox = i;
soy = j;
}else if(data[i][j] == 2){
stx = i;
sty = j;
}else if(data[i][j] == -1){
data[i][j] = 0;
eox = i;
eoy = j;
}
else if(data[i][j] == -2){
data[i][j] = 0;
etx = i;
ety = j;
}
}
}
DFS(sox,soy,stx,sty,0,-1);
if(ret)
{
printf("%d\n",min);
}else{
printf("%d\n",-1);
}
ret = false;
min = 8;
for(int i = 1;i <= row;i++)
{
for(int j = 1;j <= col;j++)
{
data[i][j] = 9;
}
}
}
return 0;
}
void DFS(int ox,int oy,int tx,int ty,int step,int I)
{
if(ox == eox && oy == eoy && tx == etx && ty == ety)
{
//printf("%d\t",step);
ret = true;
if(step < min)
{
min = step;
}
return;
}
if(step >= 8)
{
return;
}
int lx = ox,ly = oy,rx = tx,ry = ty;
data[lx][ly] = 0;
data[rx][ry] = 0;
for(int i = 0;i < 4;i++)
{
if(i == I)
{
continue;
}
if(i == 0){
if(lx > rx){
while(1){
if(data[lx + Dx[i]][ly] != 9)
{
data[lx][ly] = 0;
lx += Dx[i];
}
else{
data[lx][ly] = 1;
break;
}
}
while(1){
if(data[rx + Dx[i]][ry] != 9 && data[rx + Dx[i]][ry] != 1)
{
data[rx][ry] = 0;
rx += Dx[i];
}
else{
data[rx][ry] = 2;
break;
}
}
}
else if(lx <= rx){
while(1){
if(data[rx + Dx[i]][ry] != 9)
{
data[rx][ry] = 0;
rx += Dx[i];
}
else{
data[rx][ry] = 2;
break;
}
}
while(1){
if(data[lx + Dx[i]][ly] != 9 && data[lx + Dx[i]][ly] != 2)
{
data[lx][ly] = 0;
lx += Dx[i];
}
else{
data[lx][ly] = 1;
break;
}
}
}
DFS(lx,ly,rx,ry,step + 1,i);
data[lx][ly] = 0;
data[rx][ry] = 0;
lx = ox;
ly = oy;
rx = tx;
ry = ty;
data[lx][ly] = 1;
data[rx][ry] = 2;
}
else if(i == 1){
if(lx > rx){
while(1){
if(data[rx + Dx[i]][ry] != 9)
{
data[rx][ry] = 0;
rx += Dx[i];
}
else{
data[rx][ry] = 2;
break;
}
}
while(1){
if(data[lx + Dx[i]][ly] != 9 && data[lx + Dx[i]][ly] != 2)
{
data[lx][ly] = 0;
lx += Dx[i];
}
else{
data[lx][ly] = 1;
break;
}
}
}
else if(lx <= rx){
while(1){
if(data[lx + Dx[i]][ly] != 9)
{
data[lx][ly] = 0;
lx += Dx[i];
}
else{
data[lx][ly] = 1;
break;
}
}
while(1){
if(data[rx + Dx[i]][ry] != 9 && data[rx + Dx[i]][ry] != 1)
{
data[rx][ry] = 0;
rx += Dx[i];
}
else{
data[rx][ry] = 2;
break;
}
}
}
DFS(lx,ly,rx,ry,step + 1,i);
data[lx][ly] = 0;
data[rx][ry] = 0;
lx = ox;
ly = oy;
rx = tx;
ry = ty;
data[lx][ly] = 1;
data[rx][ry] = 2;
}
else if(i == 2){
if(ly > ry){
while(1){
if(data[rx][ry + Dy[i]] != 9)
{
data[rx][ry] = 0;
ry += Dy[i];
}
else{
data[rx][ry] = 2;
break;
}
}
while(1){
if(data[lx][ly + Dy[i]] != 9 && data[lx][ly + Dy[i]] != 2)
{
data[lx][ly] = 0;
ly += Dy[i];
}
else{
data[lx][ly] = 1;
break;
}
}
}
else if(ly <= ry){
while(1){
if(data[lx][ly + Dy[i]] != 9)
{
data[lx][ly] = 0;
ly += Dy[i];
}
else{
data[lx][ly] = 1;
break;
}
}
while(1){
if(data[rx][ry + Dy[i]] != 9 && data[rx][ry + Dy[i]] != 1)
{
data[rx][ry] = 0;
ry += Dy[i];
}
else{
data[rx][ry] = 2;
break;
}
}
}
DFS(lx,ly,rx,ry,step + 1,i);
data[lx][ly] = 0;
data[rx][ry] = 0;
lx = ox;
ly = oy;
rx = tx;
ry = ty;
data[lx][ly] = 1;
data[rx][ry] = 2;
}
else if(i == 3){
if(ly > ry){
while(1){
if(data[lx][ly + Dy[i]] != 9)
{
data[lx][ly] = 0;
ly += Dy[i];
}
else{
data[lx][ly] = 1;
break;
}
}
while(1){
if(data[rx][ry + Dy[i]] != 9 && data[rx][ry + Dy[i]] != 1)
{
data[rx][ry] = 0;
ry += Dy[i];
}
else{
data[rx][ry] = 2;
break;
}
}
}
else if(ly <= ry){
while(1){
if(data[rx][ry + Dy[i]] != 9)
{
data[rx][ry] = 0;
ry += Dy[i];
}
else{
data[rx][ry] = 2;
break;
}
}
while(1){
if(data[lx][ly + Dy[i]] != 9 && data[lx][ly + Dy[i]] != 2)
{
data[lx][ly] = 0;
ly += Dy[i];
}
else{
data[lx][ly] = 1;
break;
}
}
}
DFS(lx,ly,rx,ry,step + 1,i);
data[lx][ly] = 0;
data[rx][ry] = 0;
lx = ox;
ly = oy;
rx = tx;
ry = ty;
data[lx][ly] = 1;
data[rx][ry] = 2;
}
}
}