90 lines
1.5 KiB
Plaintext
90 lines
1.5 KiB
Plaintext
|
const int INF = 1073741824;
|
||
|
int a[30][30];
|
||
|
int step[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
|
||
|
int w, h, x_0, y_0, x_1, y_1;
|
||
|
|
||
|
int search(int x, int y, int n)
|
||
|
{
|
||
|
if (n > 10)
|
||
|
return INF;
|
||
|
int num = INF;
|
||
|
int i = 0;
|
||
|
while (i < 4) {
|
||
|
int coun = 0;
|
||
|
int x2 = x, y2 = y;
|
||
|
while (a[x2][y2] != 1) {
|
||
|
if (x2 == x_1 && y2 == y_1) break;
|
||
|
x2 = x2 + step[i][0];
|
||
|
y2 = y2 + step[i][1];
|
||
|
coun = coun + 1;
|
||
|
}
|
||
|
if (x2 == x_1 && y2 == y_1)
|
||
|
return 1;
|
||
|
if (coun <= 1) {
|
||
|
i = i + 1;
|
||
|
continue;
|
||
|
}
|
||
|
if (x2 == 0 || x2 == h + 1 || y2 == 0 || y2 == w + 1) {
|
||
|
i = i + 1;
|
||
|
continue;
|
||
|
}
|
||
|
a[x2][y2] = 0;
|
||
|
int searchResult = search(x2 - step[i][0], y2 - step[i][1], n + 1) + 1;
|
||
|
if (searchResult < num)
|
||
|
num = searchResult;
|
||
|
a[x2][y2] = 1;
|
||
|
i = i + 1;
|
||
|
}
|
||
|
|
||
|
if (num > 10)
|
||
|
return INF;
|
||
|
return num;
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
w = getint();
|
||
|
h = getint();
|
||
|
while (w != 0) {
|
||
|
int i, j;
|
||
|
i = 0;
|
||
|
while (i < 30) {
|
||
|
j = 0;
|
||
|
while (j < 30) {
|
||
|
a[i][j] = 1;
|
||
|
j = j + 1;
|
||
|
}
|
||
|
i = i + 1;
|
||
|
}
|
||
|
i = 1;
|
||
|
while (i <= h) {
|
||
|
j = 1;
|
||
|
while (j <= w) {
|
||
|
a[i][j] = getint();
|
||
|
if (a[i][j] == 2) {
|
||
|
x_0 = i;
|
||
|
y_0 = j;
|
||
|
}
|
||
|
else if (a[i][j] == 3) {
|
||
|
x_1 = i;
|
||
|
y_1 = j;
|
||
|
}
|
||
|
j = j + 1;
|
||
|
}
|
||
|
i = i + 1;
|
||
|
}
|
||
|
int res = search(x_0, y_0, 1);
|
||
|
if (res <= 10) {
|
||
|
putint(res);
|
||
|
putch(10);
|
||
|
}
|
||
|
else {
|
||
|
putint(-1);
|
||
|
putch(10);
|
||
|
}
|
||
|
w = getint();
|
||
|
h = getint();
|
||
|
}
|
||
|
return 0;
|
||
|
}
|