题解 | #迷宫问题#

迷宫问题

https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

#include <stdio.h>

int map[11][11];//地图
int n, m; //地图规模
int trace[101][2];//记录路径

//允许的方向
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};

void dfs(int x, int y, int cnt) { //cnt指走了几步路
    if (map[n - 1][m - 1] == 2) {
        for (int i = 0; i < cnt; i++) {
            printf("(%d,%d)\n", trace[i][0], trace[i][1]);
        }
        return;
    }
    //四个方向
    for (int i = 0; i < 4; i++) {
        int xx = dx[i] + x;
        int yy = dy[i] + y;
        //边界
        if (xx >= 0 && yy >= 0 && xx < n && yy < m && map[xx][yy] == 0) {
            map[xx][yy] = 2;
            trace[cnt][0] = xx;
            trace[cnt][1] = yy;
            dfs(xx, yy, cnt + 1);
            map[xx][yy] = 0;
        }
    }
}

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &map[i][j]);
        }
    }
    //0-没走过 1-墙 2-可达
    trace[0][0] = trace[0][1] = 0;
    map[0][0] = 2;
    dfs(0, 0, 1);

    return 0;

}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务