题解 | #迷宫问题#

迷宫问题

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

#include <stdio.h>
#include <stdbool.h>

static bool g_matrix[10][10];
static char g_data[100][2] = {0}; /* DFS 栈, 0 为行索引,1为列索引 */
int main(int argc, char** argv)
{
    int n, m, row, col, idx = 0;
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) scanf("%d", &g_matrix[i][j]);

    while (idx >= 0) {
        row = g_data[idx][0]; col = g_data[idx][1];
        if ((row == n - 1) && (col == m -  1)) break; /* 栈顶到最后匹配元素退出 */
        g_matrix[row][col] = true; /* 当前元素置 1 , 表示已经匹配过该节点 */

        if (((row - 1) >= 0) && (g_matrix[row - 1][col] == 0)) { /* up */
            g_data[++idx][0] = row - 1;
            g_data[idx][1] = col;
        } else if (((row + 1) < n) && (g_matrix[row + 1][col] == 0)) { /* down */
            g_data[++idx][0] = row + 1;
            g_data[idx][1] = col;
        } else if (((col - 1) >= 0) && (g_matrix[row][col - 1] == 0)) { /* left */
            g_data[++idx][0] = row;
            g_data[idx][1] = col - 1;
        } else if (((col + 1) < m) && (g_matrix[row][col + 1] == 0)) { /* right */
            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;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 10:39
一个证都没&nbsp;我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
这不纯纯作弊了吗😢😢😢
编程界菜鸡:信这个的这辈子有了,这智商你靠啥都没用
你找工作的时候用AI吗?
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务