//墙壁为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;
}