题解 | #迷宫问题#

迷宫问题

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

全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务