=0&&jh4、了迷宫算法的设计,并在算法输出函数(stdio.h);过程调用函数tab[ih][jh]=1;的基础上用C语言实现了求迷宫中从入口到(process.h);动态存储分配函数(malloc.search(row,col,tab,ih,jh,ir+1,ie1,出口的路径,最后进行了调试和数据测试。h)。ie2,no);关键字2.本程序的设计过程分三大块:主程tab[ih][jh]=0;序(main());试探函数(search());数据子迷宫算法;程序实现;调试}文件(input.c)。主要过程就是:通过主程Abstract}序调用数据文件,然后用一维数组来模拟Thisarticlegavet
5、hedesignofmazealgorithmfirstly,and}二维数组进行动态存储,再从第一个入口basedonthealgorithm,italsogotasolutionoftheentrance开始,调用试探函数探测通路,把探测到的tothepathofexportswithClanguage,finally,itdebugedmain()通路入栈,进入下一层调用。直到找出所有andtestedwithdata.{的通路,最后打印输出。keywordsFILE*fp;MazeAlgorithm;ProgrammingAchieve;Debug三详细设计程序introw,col,
6、*tab1,**tab2,*ie1,*ie2,#includeir,no,i0,j0,i,j;#include迷宫问题的求解方法很多,如递归算#includeif((fp=fopen("input.c","r"))法、遗传算法、回溯算法等,这些经典算法voidsearch(introw,intcol,int**==NULL)//打开数据文件的缺点是实现过程比较繁杂。本文介绍的tab,inti0,intj0,intir,int*ie1,int*ie2,{是一种基于八方向跟踪算法,希望能为迷int*no)//试探函数printf("Th
7、eopenError!");exit(0);宫算法研究提供另一种参考思路。{}inti,jh,ih,j,count;fscanf(fp,"%d%d",&row,&col);//一迷宫算法if(i0==row-1&&j0==col-1)//若读入迷宫的矩阵行和列大小1.以二为数组表示迷宫,数组中以元能到达出口素值为0表示通路,1表示障碍,迷宫的大{tab1=(int*)malloc((unsigned)小由用户自己设定,但限定迷宫的大小不++(*no);//方法数col*row*sizeof(int));//申请动态存储区超过10。加1tab2=(int**)malloc((unsigned)
8、2.用户以文件的形式输入迷宫的数printf("#----------------row*sizeof(int*));//tab1一维数组来模拟据:文件中第一行的数据为迷宫的行数mThe~~~~[%d]th~~~~~Solution----------tab2二维和列数n;从第二行至第m+1行(每行n个----------#",*no);/数组数)为迷宫值,同一行中的两个数字之间用/打印该种路径的出现顺序ie1=(int*)malloc((unsigned)col*sizeof空白字符相隔。printf("(%d,%d)",1,1);//从入口开(int));3.若设定的迷宫存在通路,则
9、以长方始打印ie2=(int*)malloc((unsigned)col*sizeof阵形式将迷宫及其通路输出到标准输出文count=0;//输出换行计(int));件(及终端)上,若设定的迷宫不存在通路,数则报告相应信息。for(i=0;i