void print_answer(void) {
int i, j;
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++)
printf("%c", " *?0"[position[i][j]]);
printf("\n");
}
}
int check(int y, int x) {
if (x < 0 || x > 8) return 0;
if (y < 0 || y > 8) return 0;
return position[y][x] % 2 == 0;
}
int visit(int y, int x) {
int r;
if (!check(y,x)) return -1;
position[y][x] = 3;
if (x == 7 && y == 7) return 0;
if ((r = visit(y,x+1)) != -1) return 1+r;
if ((r = visit(y,x-1)) != -1) return 1+r;
if ((r = visit(y+1,x)) != -1) return 1+r;
if ((r = visit(y-1,x)) != -1) return 1+r;
position[y][x] = 2;
return -1;
}
int main(void) { int n = visit(1,1);
if (n == -1) { printf("経路がみつかりません\n"); } else {
printf("最短距離は%d\n", n);
print_answer(); }
return 0;}