酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

今天是周末,爸爸和妈妈终于带小源去到他心心念念好久的游乐场玩耍。来到游乐场后,小源沉浸在各种游乐项目中,但他最喜欢玩的是火车水战,玩了一次还想再玩几次。不过呢,想要再次玩火车水战,需要从出口走到入口,中间是一座迷宫。迷宫为一个a行b列的格子组成,某些格子有障碍物,不可通过。成功走出迷宫后,即可再次玩耍。小源很想以最快的速度走出迷宫,以便尽快再次玩耍。下面请你帮小源以最小的步数走出迷宫。 迷宫可以表示为a行b列的矩阵,有障碍物的格子可以通过设置不同的值来表示。起点和终点可以通过下标表示。 输入格式: 输入n组如下的数: 输入2个整数a和b,表示a行b列的迷宫,然后输入一个整数c,表示障碍点数,再依次输入c个障碍点的坐标(x,y),最后输入起始点和终止点的坐标(xs,ys)和(xe,ye)。 输出格式: 针对每组数,输出从起始点到终止点的最小步数。若无法达到,则输出“not arrive”。c语言实现

```c #include <stdio.h> #define MAX_SIZE 100 int maze[MAX_SIZE][MAX_SIZE]; int visited[MAX_SIZE][MAX_SIZE]; int a, b; int dx[4] = {1, -1, 0, 0}; int dy[4] = {0, 0, 1, -1}; typedef struct { int x; int y; int step; } Node; Node queue[MAX_SIZE * MAX_SIZE]; int bfs(int xs, int ys, int xe, int ye) { int front = 0, rear = 0; queue[rear].x = xs; queue[rear].y = ys; queue[rear].step = 0; rear++; while (front < rear) { Node current = queue[front]; front++; if (current.x == xe && current.y == ye) { return current.step; } for (int i = 0; i < 4; i++) { int nx = current.x + dx[i]; int ny = current.y + dy[i]; if (nx >= 0 && nx < a && ny >= 0 && ny < b && maze[nx][ny] == 0 && !visited[nx][ny]) { visited[nx][ny] = 1; queue[rear].x = nx; queue[rear].y = ny; queue[rear].step = current.step + 1; rear++; } } } return -1; } int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { int c, xs, ys, xe, ye; scanf("%d %d %d", &a, &b, &c); for (int j = 0; j < a; j++) { for (int k = 0; k < b; k++) { maze[j][k] = 0; visited[j][k] = 0; } } for (int j = 0; j < c; j++) { int x, y; scanf("%d %d", &x, &y); maze[x][y] = 1; } scanf("%d %d %d %d", &xs, &ys, &xe, &ye); int result = bfs(xs, ys, xe, ye); if (result == -1) { printf("not arrive\n"); } else { printf("%d\n", result); } } return 0; } ``` [2024-11-24 18:45:30 | AI写代码神器 | 1249点数解答]

相关提问