很好很好很好

#include <stdio.h>
#include <stdbool.h>

#define MAX 100

// 定义迷宫的行数和列数为全局变量
int m, n;

// 判断当前位置是否合法
bool isValid(int maze[][MAX], int x, int y)
{
    if (x < 0 || y < 0 || x >= m || y >= n || maze[x][y] == 1)
        return false;
    return true;
}

// DFS遍历迷宫寻找路径
bool dfs(int maze[][MAX], int path[][2], int x, int y, int end_x, int end_y)
{
    // 如果当前位置是终点,则找到路径,终止递归
    if (x == end_x && y == end_y)
        return true;
    
    // 如果当前位置合法,则标记该位置已经访问过,并保存该位置的坐标到路径中
    if (isValid(maze, x, y))
    {
        maze[x][y] = 1;
        path[x][y] = 1;
        
        // 递归尝试向上下左右四个方向移动
        if (dfs(maze, path, x-1, y, end_x, end_y) // 上
            || dfs(maze, path, x+1, y, end_x, end_y) // 下
            || dfs(maze, path, x, y-1, end_x, end_y) // 左
            || dfs(maze, path, x, y+1, end_x, end_y)) // 右
        {
            return true;
        }
        
        // 如果四个方向都不可行,则将当前位置从路径中移除,并返回上一步
        path[x][y] = 0;
    }
    
    return false;
}

int main()
{
    int maze[MAX][MAX];
    int path[MAX][2] = {0}; // 保存路径的坐标,默认为0
    
    // 输入迷宫的行数和列数
    scanf("%d %d", &m, &n);
    
    // 输入迷宫的内容
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &maze[i][j]);
        }
    }
    
    int start_x, start_y, end_x, end_y;
    
    // 输入起点和终点的坐标
    scanf("%d %d %d %d", &start_x, &start_y, &end_x, &end_y);
    
    // 调用dfs函数来查找路径
    if (dfs(maze, path, start_x, start_y, end_x, end_y))
    {
        // 输出路径的坐标
        printf("(%d %d)", start_x, start_y);
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (path[i][j] == 1)
                    printf("(%d %d)", i, j);
            }
        }
        printf("\n");
    }
    else
    {
        printf("No Path!\n");
    }
    
    return 0;
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值