C语言模拟走迷宫

2025-11-24 20:05:11

1、首先打开VC++6.0

C语言模拟走迷宫

2、选择文件,新建

C语言模拟走迷宫

3、选择C++ source file 新建一个空白文档

C语言模拟走迷宫

4、声明头文件和常量

#include<stdio.h>

#define ROW 8

#define COLUMN 8

#define STEP ROW*COLUMN

/*ROW表示迷宫的行数,COLUMN表示迷宫的列数,STEP表示队列的容量*/

C语言模拟走迷宫

5、定义一个用来记录迷宫探路的队列

struct StepQueue

{

int x,y;    

int PreStep;

}StepQ[STEP],tmpStepQ[STEP];

C语言模拟走迷宫

6、定义一个结构体用来表示迷宫中的移动方向,一共有8种方向

struct MoveD

{

/*x,y坐标增量,取值-1,0,1*/

int x, y;  

}move[8];

C语言模拟走迷宫

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);

}

C语言模拟走迷宫

8、迷宫生成函数

void CreateMaze(int maze[ROW][COLUMN])

{

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]);

}

}

C语言模拟走迷宫

9、int main()

{

/*声明一个用来放迷宫的数组*/

int maze[ROW][COLUMN];

/*初始化移动方向数组*/

move[0].x=-1;move[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;

}

C语言模拟走迷宫

10、运行结果

C语言模拟走迷宫

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢