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;i0 && *(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