c语言迷宫算法输出转折点坐标
时间: 2023-07-26 07:06:28 浏览: 207
用c语言实现迷宫算法
3星 · 编辑精心推荐
迷宫中的转折点可以定义为路径中一个方向改变的点,即从直走变为拐弯或从拐弯变为直走的点。以下是一个简单的C语言代码示例,可以输出迷宫中所有的转折点坐标:
```c
#include <stdio.h>
#define ROW 10
#define COL 10
int maze[ROW][COL] = { // 迷宫地图,0表示可走,1表示障碍物
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 0, 1, 1, 0, 1, 1, 0},
{0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 0, 1, 1, 1, 1},
{0, 1, 0, 0, 1, 0, 0, 0, 0, 1},
{0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
{0, 1, 0, 0, 0, 0, 0, 1, 0, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 0, 0}
};
int visited[ROW][COL] = {0}; // 标记数组,记录是否访问过
void find_turning_points(int x, int y, int dir) {
visited[x][y] = 1; // 标记当前位置已经访问过
if (dir == 1 && x > 0 && maze[x-1][y] == 0 && (y == 0 || maze[x][y-1] == 1)) {
printf("(%d, %d)\n", x, y); // 打印转折点坐标
}
if (dir == 2 && y < COL-1 && maze[x][y+1] == 0 && (x == 0 || maze[x-1][y] == 1)) {
printf("(%d, %d)\n", x, y);
}
if (dir == 3 && x < ROW-1 && maze[x+1][y] == 0 && (y == COL-1 || maze[x][y+1] == 1)) {
printf("(%d, %d)\n", x, y);
}
if (dir == 4 && y > 0 && maze[x][y-1] == 0 && (x == ROW-1 || maze[x+1][y] == 1)) {
printf("(%d, %d)\n", x, y);
}
if (x > 0 && maze[x-1][y] == 0 && !visited[x-1][y]) {
find_turning_points(x-1, y, 1); // 向上走
}
if (y < COL-1 && maze[x][y+1] == 0 && !visited[x][y+1]) {
find_turning_points(x, y+1, 2); // 向右走
}
if (x < ROW-1 && maze[x+1][y] == 0 && !visited[x+1][y]) {
find_turning_points(x+1, y, 3); // 向下走
}
if (y > 0 && maze[x][y-1] == 0 && !visited[x][y-1]) {
find_turning_points(x, y-1, 4); // 向左走
}
}
int main() {
find_turning_points(0, 0, 2); // 从起点开始,初始方向向右
return 0;
}
```
在这个代码中,我们使用了递归的方式遍历迷宫,找到所有的转折点。对于每个未访问过的位置,我们分别向四个方向进行探索,如果当前方向上的下一个位置可以走,并且之前没有访问过,则继续递归搜索。当我们到达一个转折点时,根据当前的方向和周围的障碍物情况,判断是否是一个转折点,并输出其坐标。注意,我们需要使用一个 `visited` 数组来记录哪些位置已经访问过,防止重复访问。
在这个代码中,我们假设起点在左上角,初始方向向右。如果你的起点和方向不同,可以相应地修改输入参数。
阅读全文