#include<stdio.h>
#define DEBUG_IO (0)
const int SIZE = 101;
int x_end = 0;
int y_end = 0;
int answer;
int temp = 0;
int map[SIZE][SIZE] = {0};
int N = 0;
int k = 0;
enum Direct
{
UP,
DOWN,
LEFT,
RIGHT
};
void dfs(int x, int y, Direct d);
int main()
{
int i = 0;
int j = 0;
int x_start = 0;
int y_start = 0;
answer = 65535;
char temp;
#if DEBUG_IO
freopen("input.txt", "r", stdin);
setbuf(stdout, NULL);
#endif
scanf("%d", &N);
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
{
do
{
scanf("%c", &temp);
}while(temp != '0' && temp != '1' && temp != '#' && temp != '@');
if(temp == '0')
{
map[i][j] = 0;
}
else if(temp == '1')
{
map[i][j] = 1;
}
else if(temp == '@')
{
map[i][j] = 2;
}
else if(temp == '#')
{
x_start = i;
y_start = j;
map[i][j] = 0;
}
}
}
dfs(x_start, y_start, UP);
dfs(x_start, y_start, DOWN);
dfs(x_start, y_start, LEFT);
dfs(x_start, y_start, RIGHT);
if(answer > 10 || temp == 0)
{
answer = -1;
}
printf("%d", answer);
return 0;
}
void dfs(int x, int y, Direct d)
{
temp++;
if(temp > 10)
{
temp--;
return;
}
if(d == UP)
{
while(x >= 0 && x < N && map[x][y] == 0)
{
x--;
}
//出界
if(x == - 1)
{
temp--;
return;
}
//没出界
if(x >= 0 && x < N && map[x][y] == 1)
{
map[x][y] = 0;
dfs(x + 1, y, UP);
dfs(x + 1, y, DOWN);
dfs(x + 1, y, LEFT);
dfs(x + 1, y, RIGHT);
map[x][y] = 1;
}
else if(x > 0 && x < N && map[x][y] == 2 && map[x - 1][y] == 1)//找到了
{
if(answer > temp)
{
answer = temp;
}
temp--;
return;
}
}
else if(d == DOWN)
{
while(x >=0 && x < N && map[x][y] == 0)
{
x++;
}
//出界
if(x == N)
{
temp--;
return;
}
//没出界
if(x >= 0 && x < N && map[x][y] == 1)
{
map[x][y] = 0;
dfs(x - 1, y, UP);
dfs(x - 1, y, DOWN);
dfs(x - 1, y, LEFT);
dfs(x - 1, y, RIGHT);
map[x][y] = 1;
}
else if(x >= 0 && x < N - 1 && map[x][y] == 2 && map[x + 1][y] == 1)//找到了
{
if(answer > temp)
{
answer = temp;
}
temp--;
return;
}
}
else if(d == LEFT)
{
while(y >= 0 && y < N && map[x][y] == 0)
{
y--;
}
//出界
if(y == - 1)
{
temp--;
return;
}
//没出界
if(y >= 0 && y < N && map[x][y] == 1)
{
map[x][y] = 0;
dfs(x, y + 1, UP);
dfs(x, y + 1, DOWN);
dfs(x, y + 1, LEFT);
dfs(x, y + 1, RIGHT);
map[x][y] = 1;
}
else if(y > 0 && y < N && map[x][y] == 2 && map[x][y - 1] == 1)//找到了
{
if(answer > temp)
{
answer = temp;
}
temp--;
return;
}
}
else if(d == RIGHT)
{
while(y >=0 && y < N && map[x][y] == 0)
{
y++;
}
//出界
if(y == N)
{
temp--;
return;
}
//没出界
if(y >= 0 && y < N && map[x][y] == 1)
{
map[x][y] = 0;
dfs(x, y - 1, UP);
dfs(x, y - 1, DOWN);
dfs(x, y - 1, LEFT);
dfs(x, y - 1, RIGHT);
map[x][y] = 1;
}
else if(y >= 0 && y < N - 1 && map[x][y] == 2 && map[x][y + 1] == 1)//找到了
{
if(answer > temp)
{
answer = temp;
}
temp--;
return;
}
}
temp--;
}
1022冰壶
最新推荐文章于 2023-06-27 20:05:47 发布