⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maze.cpp

📁 一次课程设计
💻 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 + -