www.pudn.com > MG > MG.c
#include#include #define CAN 0 ///迷宫通路 #define WALL 1 ///迷宫障碍 #define PATH 2 ///迷宫路径 #define EVER 3 ///曾经走过但事实上是不行的 #define Fail 0 #define Succ 1 #define M 80 ///迷宫的最大行数 #define N 80 ///迷宫的最大列数 typedef int Status; Status ReadData(fname,pmaze,arg) //从文件中读取数据 char *fname; int *pmaze; int arg[]; { FILE *fp; int i,j; fp=fopen(fname,"r"); if(!fp) return Fail; fscanf(fp,"%d %d",&arg[0],&arg[1]); for(i=0;i 0 && *(pmaze+arg[1]*r+c-1)==CAN) c=c-1; else if(top!=0 && r>0 && *(pmaze+arg[1]*(r-1)+c)==CAN) r=r-1; else //此点是死胡同 {*(pmaze+arg[1]*r+c)=EVER; top--; ///1 找到路径的上一点 r=*(sR+top); ///2 c=*(sC+top); ///3 top--; ///1否则找到的点在while循环的下 ///2一次执行时回再次推入栈 if(top==-1) break;//说明没有合适的路径 } }//while if(r==arg[4] && c==arg[5]) {*(pmaze+arg[1]*r+c)=PATH;return Succ;} else {return Fail;} }//Solution main(argc,argv) int argc; char *argv[]; { char *fname; ///数据文件名 int maze[M][N]; ///迷宫表示 int arg[6]; ///如下边表格所示的内容,是参数的集合 Status res; ///解决问题成功与否的标志 // arg[0] | arg[1] | arg[2] | arg[3] | arg[4] | arg[5] // --------+--------+--------+--------+--------+------- // rows | cols | r_begin| c_begin| r_end | c_end printf("----+---+---+----MAZE SOLUTION----+---+---+----\n"); printf("===============================================\n"); printf(" + ---> This point has never been visited. \n"); printf(" # ---> This point is a wall-point. \n"); printf(" * ---> This point has ever been visited, \n"); printf(" but it is not a path-point. \n"); printf(" @ ---> This point is a path-point. \n"); printf("===============================================\n"); fname=(char *)malloc(20*sizeof(char)); //根据命令行参数读取文件名::开始 if(argc==1) {printf("FILENAME(Lenth<=20): "); scanf(" %s",fname); } else fname=argv[1]; //根据命令行参数读取文件::结束 printf("===============================================\n"); //读取文件中的数据建立迷宫::开始 ReadData(fname,maze,arg); OutputMaze(maze,arg); //读取文件中的数据建立迷宫::结束 printf("===============================================\n"); //设置迷宫的出入口::开始 arg[2]=arg[3]=arg[4]=arg[5]=-1; if(argc>=3) {arg[2]=0; arg[3]=0; arg[4]=arg[0]; arg[5]=arg[1]; printf("BEGIN (row,col):"); printf("END: (row,col):"); arg[4]--;arg[5]--; } else SetMaze(arg); ////以下四行为容错功能代码 if(arg[2]==-1) arg[2]=0; if(arg[3]==-1) arg[3]=0; if(arg[4]==-1) arg[4]=arg[0]; if(arg[5]==-1) arg[5]=arg[1]; //设置迷宫的出入口::结束 printf("===============================================\n"); //调用Solution解决问题::开始 res=Solution(maze,arg); OutputMaze(maze,arg); //调用Solution解决问题::结束 printf("===============================================\n"); //显示解决问题的结果::开始 if(res==Succ) printf("Solve Successfully!\n"); else printf("No Solution\n"); //显示解决问题的结果::结束 printf("----+---+----MAZE SOLUTION----+---+----\n"); }//main