有一个正方形的迷宫,上面铺着正方形的瓷砖,标记为’O’的瓷砖可以在上面移动,但是标记为‘X’不可以在上面移动。一个男人从左上角移动到右下角。请写一个程序来计算他有多少种方案可以完成这个移动,要求是走过的瓷砖不能重复走,同时标记为’X’的瓷砖也不能走。
第一行输入一个n,表示n*n的迷接下来n行输入该迷宫,o或x,输出一个整数表示移动方案数。
怎么实现方案数的计算,目前我只能算出一种
chatgpt:不喜勿喷
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 100
int n;
char maze[MAX_N][MAX_N];
int visited[MAX_N][MAX_N];
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
int dfs(int x, int y) {
if (x == n-1 && y == n-1) { // 到达终点
return 1;
}
visited[x][y] = 1;
int count = 0;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < n && ny >= 0 && ny < n && maze[nx][ny] == 'O' && !visited[nx][ny]) { // 判断下一步是否可行
count += dfs(nx, ny);
}
}
visited[x][y] = 0; // 恢复访问标记
return count;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", maze[i]);
}
memset(visited, 0, sizeof(visited));
printf("%d\n", dfs(0, 0));
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: