题目描述 这是个简单迷宫,请判断是否能走出迷宫。 输入 第一个数字T代表有T组测试数据; 每组数据第一行为起点终点坐标s1 s2 e1 e2; 接下来为一个3*3迷宫(包括围墙5*5,以0开始); “*”表示围墙不能走,“.”表示可走; 输出 若是能走出迷宫输出YES,不能则为NO;用c语言写
时间: 2024-03-01 18:51:57 浏览: 89
好的,下面是使用 C 语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 5
#define MAXM 7
int T, s1, s2, e1, e2;
char maze[MAXM][MAXM];
int visited[MAXM][MAXM];
const int dx[] = {-1, 0, 1, 0}; // 上、右、下、左
const int dy[] = {0, 1, 0, -1};
int dfs(int x, int y) {
if (x == e1 && y == e2) return 1; // 到达终点
visited[x][y] = 1; // 标记已访问
for (int i = 0; i < 4; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (nx < 0 || nx > MAXM - 1 || ny < 0 || ny > MAXM - 1) continue; // 越界
if (visited[nx][ny] || maze[nx][ny] == '*') continue; // 已访问或是围墙
if (dfs(nx, ny)) return 1;
}
return 0;
}
int main() {
scanf("%d", &T);
while (T--) {
memset(visited, 0, sizeof(visited));
scanf("%d%d%d%d", &s1, &s2, &e1, &e2);
for (int i = 0; i < MAXM; i++) {
scanf("%s", maze[i]);
}
if (dfs(s1, s2)) printf("YES\n");
else printf("NO\n");
}
return 0;
}
```
注意,由于 C 语言没有字符串类型,因此我们使用字符数组来存储迷宫地图。在读入地图时,我们使用 scanf("%s", maze[i]) 来读入每一行地图。由于迷宫大小为 5x5,因此我们将数组大小设为 MAXM=7。
此外,由于 C 语言没有 bool 类型,因此我们使用 0 和 1 来表示 visited 数组中每个位置是否已经访问过。在 DFS 函数中,如果到达终点则返回 1,否则返回 0。在主函数中,如果 dfs 函数返回 1,则输出 "YES",否则输出 "NO"。