题解 | #迷宫问题#
迷宫问题
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;
}