本例将随机产生一个10*10的迷宫输出后,在下面输出此迷宫的解法。
解法为从坐标(1,1)处进入,从(8,8,)出去,优先线路为先右后下再上最后为左。
不少人求解此题时运用的栈的相关知识,本例寻找线路的过程不运用进栈出栈,而是用回溯法“抹去”判断不行的线路。
话不多说,上代码。
#include #include #include //包括根据当前时间产生随机数的函数 static int maze[10][10]; //创建迷宫 int creatmaze() { srand((unsigned)time(NULL)); for(int i=0; i<10; i++)="" {="" for(int="" j="0;" j<10;="" j++)="" if((i="=1&&j==1)||(i==8&&j==8))" maze[i][j]="0;" else="" if(maze[i][j]="=2)" printf("="" o="" ");="" }="" printf("n");="" 输出线路(结果)="" void="" printroute()="" i="0;" i<10;="" x="" 寻找线路="" findroute(int="" i,int="" j)="" if(i="=8&&j==8)//边界条件,即找到出路" printroute();="" exit(0);="" if(maze[i][j+1]!="1&&maze[i][j+1]!=2)//判断当前位置右边是否为墙(下同理)" j++;="" findroute(i,j);="" 递归="" j--;="" 回溯="" if(maze[i+1][j]!="1&&maze[i+1][j]!=2)//下" i++;="" i--;="" if(maze[i-1][j]!="1&&maze[i-1][j]!=2)//上" if(maze[i][j-1]!="1&&maze[i][j-1]!=2)//左" printf("no="" wayn");="" int="" main()="" creatmaze();="" findroute(1,1);="" 没有找到出路="" }样例输出:
:http://www.linuxidc.com/Linux/2017-01/139480.htm