• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言递归实现迷宫寻路问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

迷宫问题采用递归和非递归两种方法,暂时完成递归方法,后续会补上非递归方法

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

bool findPath(int a[][8],int i,int j){//递归找出口
    if(i==6&&j==6)//如果找到了目标a[6][6]则返回true
        return true;
    if(a[i][j]==0)//若当前路径未被找到,则继续
    {
        a[i][j]=2;//当前走的路径置为2,表示走过
        if(findPath(a,i+1,j)||findPath(a,i,j+1)||findPath(a,i-1, j)||findPath(a,i-1,j))//每个方向都判断,依次展开递归,寻找最佳路径
            return true;//若选择的路径可以走,则返回true
        else{//若当前选择的路径不能走
            a[i][j]=0;//弹栈并恢复路径,回退到上一次的位置
            return false;
        }
    }
    else//未能找到最终点
        return false;
}
void print(int a[][8])//打印当前的二维数组表
{
    for(int i=0;i<8;i++){
        for(int j=0;j<8;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
int main(){
    int a[8][8]={0};
    for(int i=0;i<8;i++)//设置围墙和障碍物
    {
        a[0][i]=1;
        a[i][0]=1;
        a[7][i]=1;
        a[i][7]=1;
    }
    a[3][1]=1;
    a[3][2]=1;
    print(a);
    printf("-----------after find path-----------\n");
    findPath(a, 1, 1);
    print(a);
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
基于C#开发的俄罗斯方块发布时间:2022-07-13
下一篇:
Error:CouldnotfindgradlewrapperwithinAndroidSDK.MightneedtoupdateyourAndroidSDK. ...发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap