📄 maze.cpp
字号:
#include<stdio.h> /*该文件包含prinf()等函数*/
#include<stdlib.h> /*该文件包含exit()等函数*/
typedef struct
{
int left; /*向左指向的路口*/
int forward; /*向前指向的路口*/
int right; /*向右指向的路口*/
}InterSection; /*路口的结构体定义*/
typedef struct
{
int mazeSize; /*路口个数*/
InterSection * intSec; /*路口集合*/
int Exit; /*出口*/
}Maze; /*迷宫的结构体定义*/
/*---------------------------------迷宫的创建函数------------------------------------------*/
void CreatMaze(char * filename,Maze * m)
/*按文件Filename中存放的数据创建迷宫*/
{
FILE * fp;
int i;
fp=fopen(filename,"r"); /*打开文件*/
if(!fp)
{
printf("数据文件无法打开!\n");
return;
}
fscanf(fp,"%d",&m->mazeSize); /*读入路口个数*/
/*建立mazeSize+1个元素的数组*/
m->intSec=(InterSection *)malloc(sizeof(InterSection)*(m->mazeSize+1));
for(i=1;i<=m->mazeSize;i++) /*读入全部路口的结构体数值*/
fscanf(fp,"%d%d%d",&m->intSec[i].left,&m->intSec[i].forward,&m->intSec[i].right);
fscanf(fp,"%d",&m->Exit); /*读入出口数值*/
fclose(fp); /*关闭文件*/
}
/*----------------------------------迷宫的路径搜索函数----------------------------------------*/
int TravMaze(Maze * m,int currSetValue)
/*从迷宫的出口往前搜索,搜索当前路口的前一路口,直到到达迷宫的入口*/
{
int i,p=-1; /*当前路口的前一路口的标号p*/
for(i=m->mazeSize;i>0;i--)
{
if(m->Exit==m->intSec[i].forward||m->Exit==m->intSec[i].left||m->Exit==m->intSec[i].right)
/*搜索到达迷宫的出口的前一路口p*/
{
p=i; /*赋当前路口的标号*/
printf("%d<== ",p); /*输出当前路口的标号*/
}
if(p==m->intSec[i].forward||p==m->intSec[i].left||p==m->intSec[i].right)
/*搜索路口p的前一路口*/
{
p=i; /*赋当前路口的标号*/
printf("%d<== ",p); /*输出当前路口的标号*/
}
if(p==currSetValue) return 1;/*当搜索到入口currSetValue时,搜索成功返回1,搜索结束*/
}
return 0; /*否则搜索失败,返回0*/
}
/*####################################主函数#################################################*/
void main(void)
{
Maze m;
int start=1; /*迷宫的入口标号*/
CreatMaze("Maze.txt",&m); /*打开包含迷宫问题信息的文件,创建迷宫问题*/
printf("%d<== ",m.Exit); /*显示迷宫的出口*/
if(TravMaze(&m,start)) /*求出一条走出迷宫的路径,并输出*/
printf("\n此迷宫的一条通路如上所示!\n");
else
printf("此迷宫无通路!\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -