走迷宫,递归

迷宫寻路算法实现
本文介绍了一种基于递归回溯法的迷宫寻路算法,并通过C语言实现了一个具体的例子。该算法通过标记已访问路径的方式,在二维迷宫中寻找从起点到终点的可行路径。
#include <stdio.h>
#define MazeR 5
#define MazeC 9

int mark[MazeR+2][MazeC+2];

struct offsetNode {
    int up;
    int left;
    char *dir;
} move[4];

int seekPath(int Maze[MazeR+2][MazeC+2], int s_x, int s_y, int e_x ,int e_y);

int main(void)
{
    int Maze[MazeR+2][MazeC+2]={
    {1,1,1,1,1,1,1,1,1,1,1},
    {1,0,1,0,0,0,0,0,0,0,1},
    {1,0,1,0,0,1,1,1,1,0,1},
    {1,0,1,1,0,1,1,0,0,0,1},
    {1,0,1,0,0,1,1,0,1,1,1},
    {1,0,0,0,1,0,1,0,0,0,1},
    {1,1,1,1,1,1,1,1,1,1,1}
    };
    int i,j;
    move[0].up=1;move[0].left=0;move[0].dir="Down";
    move[1].up=0;move[1].left=1;move[1].dir="Right";
    move[2].up=-1;move[2].left=0;move[2].dir="Up";
    move[3].up=0;move[3].left=-1;move[3].dir="Left";
    for(i=0;i<MazeR+2;i++)
        for(j=0;j<MazeC+2;j++){
            mark[i][j]=0;
            }
    mark[1][1]=1;
    seekPath(Maze,1,1,5,9);
    return 0;
    }

int seekPath(int Maze[MazeR+2][MazeC+2], int s_x, int s_y, int e_x ,int e_y)
{
    int i,x,y;
    char *d=NULL;
    if(s_x==e_x && s_y==e_y)
        return 1;
    for(i=0;i<4;i++){

        x=s_x+move[i].up;
        y=s_y+move[i].left;
        d=move[i].dir;

        if((Maze[x][y]==0) && (mark[x][y]==0))
        {   mark[x][y]=1;
            if(seekPath(Maze,x,y,e_x,e_y))
            {   printf("(%d,%d),%s\n",x,y,d);
                return 1;
            }
        }
    }
    if(s_x==1 && s_y==1)
        printf("No avaible Path\n");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值