简单的走迷宫算法 非高效版 递归实现 Yeook

 

//墙壁为4   未走过的路为0  走过的标识为1   无路可走退回时走标号为1的路  并把退回的路标识为3  

//递归结束条件为退回到入迷宫的口  或者找到了迷宫的出口 BY Yeook 2009-12-12 17:32:56

 

 

 

#include "stdafx.h"
#include <stdio.h>

int maze[12][12]=
{
        {4,4,4,4,4,4,4,4,4,4,4,4},
        {4,4,4,4,4,4,0,0,0,0,0,4},
        {4,4,4,4,4,4,0,4,4,4,0,4},
        {4,4,0,0,0,0,0,0,4,0,0,4},
        {4,4,0,4,4,4,4,0,4,0,4,4},
        {4,4,0,4,4,4,4,0,4,0,0,0},
        {4,4,0,4,4,4,4,0,4,4,0,4},
        {4,4,0,0,0,0,4,4,4,4,0,4},
        {4,4,4,4,0,4,4,4,4,4,4,4},
        {4,4,4,4,0,4,4,4,4,4,4,4},
        {4,4,4,4,0,4,4,4,4,4,4,4},
        {4,4,4,4,0,4,4,4,4,4,4,4}
};
//入口点
int nIntoX=5,nIntoY=11;
//出口点
int nOutX=11,nOutY=4;

//当前位子
int npostionX=nIntoX,npostionY=nIntoY;
//找下一个可走的位置 nfind为传递进来要找的数字0为可以走 1为已经走过的
//nChange 为找到后改成数目数字 1为第1次走  3为死路回退后填充的值

void mazePrintf()
{
    int i=0;
    int j=0;
    for (i=0;i<12;i++)
    {
        for (j=0;j<12;j++)
        {
            printf("%2d",maze[i][j]);
        }
        printf("%/r/n");
    }
}

int findNext(int nfind,int nChange)
{
  
    //左边
    if (maze[npostionX][npostionY-1]==nfind)
    {
        maze[npostionX][npostionY]=nChange;
        npostionY--;
        return 1;
    }
    //上面
    if (maze[npostionX-1][npostionY]==nfind)
    {
        maze[npostionX][npostionY]=nChange;
        npostionX--;
        return 2;
    }
    //右边
    if (maze[npostionX][npostionY+1]==nfind)
    {
         maze[npostionX][npostionY]=nChange;
        npostionY++;
      
        return 3;
    }
    //下面
    if (maze[npostionX+1][npostionY]==nfind)
    {
         maze[npostionX][npostionY]=nChange;
        npostionX++;
      
        return 4;
    }
    //死路
    return 0;
}

void Dg_maze()
{

     int n=findNext(0,1);

    

    //int nfind,int nChange
    if (npostionX==nOutX && npostionY==nOutY)
    {
        printf("已经找到出口/r/n");
        return ;
    }
    if (npostionX==nIntoX && npostionY==nIntoY)
    {
        printf("死迷宫,有进无出/r/n");
        return;
    }
  
    if (0==n)
    {
        findNext(1,3);
    }

 

    Dg_maze();
}

 

int main(int argc, char* argv[])
{
    mazePrintf();
    Dg_maze();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值