迷宫的方案数—关于搜索法的问题

有一个正方形的迷宫,上面铺着正方形的瓷砖,标记为’O’的瓷砖可以在上面移动,但是标记为‘X’不可以在上面移动。一个男人从左上角移动到右下角。请写一个程序来计算他有多少种方案可以完成这个移动,要求是走过的瓷砖不能重复走,同时标记为’X’的瓷砖也不能走。
第一行输入一个n,表示n*n的迷接下来n行输入该迷宫,o或x,输出一个整数表示移动方案数。
怎么实现方案数的计算,目前我只能算出一种

img

img

img

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


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^