题解 | #迷宫问题#

迷宫问题

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

#include <stdio.h>

int main() {
    int n, m;
    while(scanf("%d%d", &n, &m) != EOF) {
        int maze[10][10];
        char g_data[100][2] = {0};
        // 先将迷宫读取到maze中
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++){
                scanf("%d", &maze[i][j]);
            }
        }
        // 然后我们定义一些参数方便后面的DFS
        int row, col, idx = 0;
        while (idx >= 0) {
            row = g_data[idx][0];
            col = g_data[idx][1];
            if((row == n - 1) && (col == m - 1)) break;
            maze[row][col] = 1;
            // 如果下面可以走,并且还没有被访问过(或者本来就是路)
            if(((row + 1) < n) && (maze[row + 1][col] == 0)) {
                // 我们下次可以访问这个节点
                g_data[++idx][0] = row + 1;
                g_data[idx][1] = col;
            }
            // 如果可以往上走,别忘了等于0的情况也是可以走的
            else if(((row - 1) >= 0) && (maze[row - 1][col] == 0)) {
                g_data[++idx][0] = row - 1;
                g_data[idx][1] = col;
            }
            else if(((col - 1) >= 0) && (maze[row][col - 1] == 0)) {
                g_data[++idx][0] = row;
                g_data[idx][1] = col - 1;
            }
            else if(((col + 1) < m) && (maze[row][col + 1] == 0)) {
                g_data[++idx][0] = row;
                g_data[idx][1] = col + 1;
            }
            else {
                idx--;
            }
        }
        for(int i = 0; i <= idx; i++) {
            printf("(%d,%d)\n", g_data[i][0], g_data[i][1]);
        }
    }
    return 0;
}

全部评论

相关推荐

10-04 17:25
门头沟学院 Java
snqing:Java已经饱和了,根本不缺人。随便一个2000工资的都200人起投递
点赞 评论 收藏
分享
把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务