今天是项目的第二天
昨天一顿迷茫,可恶
今天啥也不关先来点基本的构架
#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);
}
//开始入口函数(未完成)
入口函数 ,暂时的话还未完成目前只有,定义地图,以及求广源的最短路,之后的话会把菜单以及,其他的东西加入慢慢的补全
题目的话今天打了,测试暂时讲不出个啥
被薄纱了,玩不了一点!!!
先搞好项目,回头要把场子找回来
今天
先到这了,撒花谢幕