题解 | #迷宫问题#

迷宫问题

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

全部评论

相关推荐

没有offer的小土豆:专业面试一般是分配面试官然后联系你面试 应该是还没给你分配对应面试官
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
评论
1
2
分享
牛客网
牛客企业服务