项目前期1.0

今天是项目的第二天

昨天一顿迷茫,可恶

今天啥也不关先来点基本的构架

#include//队列
#define FALSE 0
#define TRUE 1
#define ERROR 0
#define OK 1
#define nocnect 999999//未链接的距离
#define maxplace 31//景区的观景点的最大个30数不要0下标的
#define SpotName 30//景点名字字符串长度

 前面的定义先,对于一些功能的时候(bfs)的时候要用到队列,本来想写的,但是呀

c++可以直接实现就没写了.

typedef struct {
	int elem[maxplace];//记录最短路径上的顶点序号
	int top;
}PathStack;
//顺序栈

第一个对栈的定义

int stackStar(PathStack* S) {
	S->top = 0;
	return OK;
}
//栈的初始化

int StackIsEmpty(PathStack S) {
	if (S.top == 0) {
		return TRUE;
	}
	return FALSE;
}
//检查栈是否为空

int Push(PathStack* S, int e) {
	if (S->top == maxplace) {
		return ERROR;
	}
	S->elem[S->top] = e;
	S->top++;
	return OK;
}
//入栈

int Pop(PathStack* S, int* e) {
	if (S->top == 0) {
		return ERROR;
	}
	S->top--;
	*e = S->elem[S->top];
}
//出栈

栈的各种操作

用栈的主要的

要是有删除景点的地点个话可以标记

typedef struct palceDrop {
	char name[50];//名字
	int number;//编号
	char brief_introduction[500];//简介
}drop;
//进去地点的节点

定义的基本7的节点,目前就写了,这些后面也许会添加一些 

typedef struct {
	palceDrop  drops[maxplace];
	double map[maxplace + 1][maxplace + 1];//邻接矩阵
	int Points, edges;//当前顶点数、边数
}AMGraph;
//地图的全部,边,点,节点数组,矩阵存边

这是总地图 ,包含了节点数组

有节点的个数,以及边的条数(有的景点未必可通的)
图的遍历,最短路以及floyed

typedef struct {
	int p[maxplace + 1];//标记该顶点是否已求出最短路径p[]数组
	double Shortest[maxplace + 1];//记录当前到i的最短路径t[]数组
	int PrePath[maxplace + 1];//记录当前最短路径的前驱顶点以及next
}Dij_AssistArray;
//djs的辅助数组
typedef struct {
	double Shortest[maxplace + 1][maxplace + 1];//记录当前最短路径
	int PrePath[maxplace + 1][maxplace+ 1];//记录当前最短路径的前驱顶点
}Floyd_AssistArray;
//floyed的辅助数组

直接定义,不用定义成山散乱的变量了

用的会更方便

写这项目,肯定会用到的

但是djsterl我还没想好咋用,floyed可以直接用求各个景点的最近的距离

单源最短路大概会用在使用者依据自己当前的距离来计算最短路

void enterData(AMGraph* f) {
	FILE* fp = fopen("D:\\xunlei\\wyclx\\景区旅游咨询系统\\data1.txt", "r");
	FILE* fd = fopen("D:\\xunlei\\wyclx\\景区旅游咨询系统\\data2.txt", "r");
	if (fp == NULL || fd == NULL) {
		printf("位置错误,文件未打开\n");
		exit(0);
	}
	fscanf(fp, "%d", f->Points);//点数
	fscanf(fp, "%d", f->edges);//边数

	for (int h = 1; h <= f->Points;h++)
		for (int j = 1;j <= f->Points;j++)
			f->map[h][j] = nocnect;//初始化

	for (int h = 1;h <= f->Points;h++)
		f->drops[h].number = h;//编号的初始化

	for (int p = 1;p <= f->edges;p++) {
		int x=0;//点1
		int y=0;//点2
		double ll=0;//两个景点的距离
		fscanf(fp, "%d", x);
		fscanf(fp, "%d", y);
		fscanf(fp, "%lf", ll);
		f->map[x][y] = ll;
		f->map[y][x] = ll;//双向的
	}//对景点距离的录入,完善地图

	for (int h = 1;h <= f->Points;h++) {
		fscanf(fd, "%s", f->drops[h].name);
		char a[200];
		while(fscanf(fd, "%s", a) != 0)
			strcpy(f->drops[h].brief_introduction, a);
	}//对名字以及简介的输入

	 fclose(fp);
	 fclose(fd);
}
//对数据的输入(暂时没有计算最短路)

文件的操作,但是还只是测试了一部分,还未全测试完

对于文件的操作还是不熟悉,用的实在是太少了

void star() {
	AMGraph* f = (AMGraph*)malloc(sizeof(AMGraph));
	enterData(f);
	Floyd_AssistArray* fl = (Floyd_AssistArray*)malloc(sizeof(Floyd_AssistArray));
	floyedachieve(f,fl);

}
//开始入口函数(未完成)

入口函数 ,暂时的话还未完成目前只有,定义地图,以及求广源的最短路,之后的话会把菜单以及,其他的东西加入慢慢的补全

题目的话今天打了,测试暂时讲不出个啥

被薄纱了,玩不了一点!!!

先搞好项目,回头要把场子找回来

今天

先到这了,撒花谢幕

 


  


你可能感兴趣的:(c++,算法,图论)