參考資訊:
https://www.cnblogs.com/cnoodle/p/16913967.html
題目:
解答:
#define MAX_SIZE 10000 int nearestExit(char **maze, int mazeSize, int *mazeColSize, int *entrance, int entranceSize) { int r = 0; int cc = 0; int st = 0; int ep = 0; int **q = NULL; q = malloc(sizeof(int *) * MAX_SIZE); for (cc = 0; cc < MAX_SIZE; cc++) { q[cc] = malloc(sizeof(int) * 2); memset(q[cc], 0, sizeof(int) * 2); } st = 0; q[ep][0] = entrance[0]; q[ep][1] = entrance[1]; maze[q[ep][0]][q[ep][1]] = '+'; ep += 1; r = 0; while ((ep - st) > 0) { int x0 = 0; int y0 = 0; int c1 = 0; int ay[] = { -1, 1, 0, 0 }; int ax[] = { 0, 0, -1, 1 }; int len = ep; for (cc = st; cc < len; cc++) { for (c1 = 0; c1 < 4; c1++) { y0 = q[cc][0] + ay[c1]; x0 = q[cc][1] + ax[c1]; if ((x0 < 0) || (y0 < 0) || (x0 >= mazeColSize[0]) || (y0 >= mazeSize)) { continue; } if (maze[y0][x0] == '+') { continue; } if ((x0 == 0) || (y0 == 0) || (x0 == (mazeColSize[0] - 1)) || (y0 == (mazeSize - 1))) { return r + 1; } q[ep][0] = y0; q[ep][1] = x0; maze[q[ep][0]][q[ep][1]] = '+'; ep += 1; } st += 1; } r += 1; } return -1; }