C语言模拟走迷宫
1、首先打开VC++6.0
2、选择文件,新建
3、选择C++ source file 新建一个空白文档
4、声明头文件和常量#include<stdio.h>#define ROW 8#define COLUMN 8#define STEP ROW*COLUMN/*ROW表示迷宫的行数,COLUMN表示迷宫的列数,STEP表示队列的容量*/
5、定义一个用来记录迷宫探路的队列struct StepQueue{int x,y; int PreStep;}StepQ[STEP],tmpStepQ[STEP];
6、定义一个结构体用来表示迷宫中的移动方向,一共有8种方向struct MoveD{/*x,y坐标增量,取值-1,0,1*/int x, y; }move[8];
7、迷宫探路函数int PathMaze(int maze[ROW][COLUMN]拘七呷憎) {int i,j,k,v,front,rear,x,y,l;/*声明一个标记数组来记录一个是否到吾褴恶将达过某个点,并进行初始化*/int mark[ROW][COLUMN];for(i=0;i<ROW;i++)for(j=0;j<COLUMN;j++)mark[i][j]=0;/*初始化入口点*/StepQ[1].x=1;StepQ[1].y=1;StepQ[1].PreStep=0;front=1;rear=1;mark[1][1]=1; while(front<=rear){/*以(x,y)为出发点进行搜索*/x=StepQ[front].x;y=StepQ[front].y;/*搜索(x,y)的8个相邻(i,j)是否可以到达*/ for(v=0;v<8;v++) {i=x+move[v].x;j=y+move[v].y;/*(i,j)为可以到达点,将起入队*/if((maze[i][j]==0)&&(mark[i][j]==0)){rear++;StepQ[rear].PreStep=front;StepQ[rear].x=i;StepQ[rear].y=j;mark[i][j]=1; }/*如果到达出口,则输出路径*/if((i==ROW-2)&&(j==COLUMN-2)) {printf("\nThe Path in this maze is: \n\n");k=rear;l=0;/*k==0说明已经到达*/while(k!=0){tmpStepQ[l++].x=StepQ[k].x;tmpStepQ[l++].y=StepQ[k].y;/*找前一点*/k=StepQ[k].PreStep;}/*输出路径*/while(l>0)printf("(%d,%d)>",tmpStepQ[--l].x,tmpStepQ[--l].y);printf("(%d,%d)",tmpStepQ[0].x,tmpStepQ[0].y);return(1); }}/*从队列中弹出一个点,front指向新的出发点*/front++; } /*队空说明没有路径*/printf("There is no Path in the maze! \n");return(0); }
8、迷宫生成函数void CreateMaze(int maze[ROW][COLU怡觎现喾MN]){int i,j;for(i=0;i<COLUMN;i++){罪焐芡拂maze[0][i]=1;maze[ROW-1][i]=1;}for(i=0;i<ROW;i++){maze[i][0]=1;maze[i][COLUMN-1]=1;}maze[1][1]=0;maze[1][2]=1;maze[1][3]=0;maze[1][4]=1;maze[1][5]=1;maze[1][6]=0; maze[2][1]=1;maze[2][2]=0;maze[2][3]=0;maze[2][4]=1;maze[2][5]=1;maze[2][6]=0;maze[3][1]=0;maze[3][2]=1;maze[3][3]=1;maze[3][4]=0;maze[3][5]=0;maze[3][6]=1;maze[4][1]=1;maze[4][2]=0;maze[4][3]=0;maze[4][4]=1;maze[4][5]=1;maze[4][6]=0;maze[5][1]=1;maze[5][2]=1;maze[5][3]=0;maze[5][4]=0;maze[5][5]=1;maze[5][6]=1;maze[6][1]=0;maze[6][2]=1;maze[6][3]=1;maze[6][4]=1;maze[6][5]=0;maze[6][6]=0;for(i=0;i<ROW;i++){printf("\n ");for(j=0;j<COLUMN;j++)printf("%2d",maze[i][j]);}}
9、int main()辘腋粪梯{/*声明一个用来放迷宫的数组*/int maze[ROW][COLUMN];/*初始化移动方向数组*/move[0].x=-1;m泠贾高框ove[0].y=-1;move[1].x=-1;move[1].y=0;move[2].x=-1;move[2].y=1;move[3].x=0;move[3].y=-1;move[4].x=0;move[4].y=1;move[5].x=1;move[5].y=-1;move[6].x=1;move[6].y=0;move[7].x=1;move[7].y=1;printf("*********************************\n");printf("| Welcome to our maze |\n");printf("*********************************\n");/*创建一个迷宫*/CreateMaze(maze);/*迷宫中探路*/PathMaze(maze);getch();return 0;}
10、运行结果