data-structure-experiments/13/dfs.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;
}