63 lines
1.6 KiB
C
63 lines
1.6 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
int m, n;
|
|
int maze[105][105];
|
|
|
|
// 存储当前路径
|
|
char *path[10005];
|
|
int path_len = 0;
|
|
|
|
void dfs(int x, int y) {
|
|
if (x == m && y == n) {
|
|
for (int i = 0; i < path_len; i++) {
|
|
printf("%s", path[i]);
|
|
if (i != path_len - 1) {
|
|
printf("->");
|
|
}
|
|
}
|
|
printf("\n");
|
|
return;
|
|
}
|
|
maze[x][y] = 1;
|
|
if (x + 1 <= m && maze[x + 1][y] == 0) {
|
|
path[path_len] = (char *)malloc(sizeof(char) * 105);
|
|
sprintf(path[path_len++], "(%d, %d)", x + 1, y);
|
|
dfs(x + 1, y);
|
|
path_len--;
|
|
}
|
|
if (y + 1 <= n && maze[x][y + 1] == 0) {
|
|
path[path_len] = (char *)malloc(sizeof(char) * 105);
|
|
sprintf(path[path_len++], "(%d, %d)", x, y + 1);
|
|
dfs(x, y + 1);
|
|
path_len--;
|
|
}
|
|
if (x - 1 >= 1 && maze[x - 1][y] == 0) {
|
|
path[path_len] = (char *)malloc(sizeof(char) * 105);
|
|
sprintf(path[path_len++], "(%d, %d)", x - 1, y);
|
|
dfs(x - 1, y);
|
|
path_len--;
|
|
}
|
|
if (y - 1 >= 1 && maze[x][y - 1] == 0) {
|
|
path[path_len] = (char *)malloc(sizeof(char) * 105);
|
|
sprintf(path[path_len++], "(%d, %d)", x, y - 1);
|
|
dfs(x, y - 1);
|
|
path_len--;
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
freopen("data.in", "r", stdin);
|
|
scanf("%d%d", &m, &n);
|
|
for (int i = 1; i <= m; i++) {
|
|
for (int j = 1; j <= n; j++) {
|
|
scanf("%d", &maze[i][j]);
|
|
}
|
|
}
|
|
path[path_len] = (char *)malloc(sizeof(char) * 105);
|
|
strcpy(path[path_len++], "(1, 1)");
|
|
dfs(1, 1);
|
|
|
|
return 0;
|
|
} |