题解 | #迷宫问题#

迷宫问题

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

全部评论

相关推荐

Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
昨天 09:08
裁应届生,一分钱补偿没有,离职了还脑控你,跟踪你,定位你,丁东服务是搞系每一个人
牛客吹哨人:建议细说...哨哥晚点统一更新到黑名单:不要重蹈覆辙!25届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1317104
叮咚买菜稳定性 10人发布 投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务