#include #include #include 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; }