河北大学校园导航【五四路】
【问题描述】
以我校为例,设计一个校园导航系统,主要为来访的客人提供信息查询。系统有两类登陆账号,一类是游客,使用该系统方便校内路线查询;一类是管理员,可以使用该系统查询校内路线,可对校园景点路线可编辑。
【需求分析】
设计学校的平面图,至少包括10个以上景点(场所),每两个景点间可以有不同道路,且路长也可能不同,找出在游人所在景点到其他景点的最短路径,或游人输入的任意两个景点的最短路径。 要求: (1) 以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,路径权重为路径长度。 (2) 为游人提供任意景点相关信息查询。 (3)为游人提供任意景点的问路查询,即任意两个景点之间的最短路径。
实现提示: 一般情况下,校园道路是双向通行的,可设计校园平面图是一个无向图。顶点和边均含有相关信息。 选做内容: (1)提供图的编辑功能:增删景点;增删道路;修改已有信息等。 (2)校园导游图的仿真界面
【笔记记录】:我是依据9个模块和两个菜单来做的,首先是选择身份,如果是管理员,输入密码,密码成功,进入管理员菜单,管理员菜单可使用九个模块;选择游客,则只能使用景点介绍,Dijkstra,Floyed三个功能模块,下面是函数模块
两个菜单,主要就是显示界面,和输入数字的一个函数调用,都好说
void menu1();//管理员菜单
void menu2();//游客菜单
然后就是九个函数模块,景点介绍重点在两个最短路径算法上
void introduce();//景点介绍
void changes();//修改景点信息
void addspot();//增加景点信息
void deletespot();//删除景点信息
void addpath();//添加道路
void deletepath();//删除道路
void Dijkstra();//某景点到最短路径
void Floyed();//任意两景点
void changecode();//修改登录密码
然后就是景点的一种邻接链表的创捷,将景点之间的关系录入链表
void Listspot();//河北大学景点列表
void createspot();//创建景点的邻接链表
对我完成来时,最困难和最重要的就是Dijkstra和Floyed的功能实现了,目前已完成Dijkstra模块,记录一下(超详细的注释哦)
上Dijkstra到所有景点最短路径代码
void Dijkstra()
{
int m,i,n,k,pre;
int D[100]; //存放原点到终点最短路径长度
int P[100]; //相应最短路径终点的前驱点
int S[100]; //存放原位置和目的点
int min;
system("cls");
createspot();
Listspot();
printf("请输入您所在的景点编号,亲~:");
scanf("%d",&m);
while(m<1||m>map.v)
{
printf("输入格式不对哦,请输入1到%d之间的数字编号,重新输入!\n",map.v);
scanf("%d",&m);
}
S[m-1]=1; //对其初始化
for(i=1;i<map.v;i++)
{
D[i]=map.edges[m-1][i];
P[i]=m-1;
S[i]=0;
}
//初始化所在位置点
D[m-1]=0;
S[m-1]=1;
P[m-1]=-1;
for(i=0;i<map.v;i++)
{ //主循环,每次求得原位置到某点最短路径,并将其加入到S中
min=BIG+1; //为了将没有路径的点最后选中,初始化+1
for(n=1;n<map.v;n++) //从未进入S的点中找最小D[n]
{
if(S[n]==0&&D[n]<min) //n没进入S且路径更短
{
k=n; //具有更小路径点存在k中
min=D[n];
}
}
S[k]=1; //存到S中
for(n=0;n<map.v;n++) //更新其他没进S的当前最短路径以及长度
{
if(S[n]==0&&(D[k]+map.edges[k][n]<D[n])) //对n在过程的点
{
D[n]=D[k]+map.edges[k][n]; //修改为更短路径长度
P[n]=k; //记忆,将n前驱换为k
}
}
}
int judge=1;
for(i=1;i<map.v;i++) //输出各最短路径长度及路径上结点
{
if(i!=m-1)
{
if(D[i]!=BIG)
{
judge=0;
printf("距离%d米: %s",D[i],map.pk[i].name);
pre=P[i];
while(pre>=0)
{
printf(" <-%s",map.pk[pre].name);
pre=P[pre];
}
printf("\n");
}
}
}
if(judge)
printf("[%d]景点与任何景点都没有可通道路,故无法查询最短路径!\n",map.pk[m-1].name);
system("pause");
}
今天用书上的弗洛伊德的那个算法模仿着试着写了些,显示不出来,然后感觉和Dijkstra有点关联,然后就还是用的Dijkstra的实现,输出的时候输出Floyed查找的两个点的输出,成功了
上Floyed任意两景点最短路径代码
void Floyed()
{
int m,i,n,k,pre;
int D[100]; //存放原点到终点最短路径长度
int P[100]; //相应最短路径终点的前驱点
int S[100]; //存放原位置和目的点
int min;
system("cls");
createspot();
Listspot();
printf("请输入您要查询距离的两个景点代号,中间用空格隔开:\n");
scanf("%d %d",&m,&n);
while(m<1||m>map.v||n<1||n>map.v)
{
printf("您的输入有误,请重新输入!范围在1~%d之间。\n",map.v);
scanf("%d %d",&m,&n);
}
S[m-1]=1; //对其初始化
for(i=1;i<map.v;i++)
{
D[i]=map.edges[m-1][i];
P[i]=m-1;
S[i]=0;
}
//初始化所在位置点
D[m-1]=0;
S[m-1]=1;
P[m-1]=-1;
for(i=0;i<map.v;i++)
{ //主循环,每次求得原位置到某点最短路径,并将其加入到S中
min=BIG+1; //为了将没有路径的点最后选中,初始化+1
for(n=1;n<map.v;n++) //从未进入S的点中找最小D[n]
{
if(S[n]==0&&D[n]<min) //n没进入S且路径更短
{
k=n; //具有更小路径点存在k中
min=D[n];
}
}
S[k]=1; //存到S中
for(n=0;n<map.v;n++) //更新其他没进S的当前最短路径以及长度
{
if(S[n]==0&&(D[k]+map.edges[k][n]<D[n])) //对n在过程的点
{
D[n]=D[k]+map.edges[k][n]; //修改为更短路径长度
P[n]=k; //记忆,将n前驱换为k
}
}
}
if(D[n-1]==BIG)
printf("【%s】与【%s】任何景点之间都没有可通道路!\n",map.pk[m-1].name,map.pk[n-1].name);
else
{
printf("【%s】->【%s】的最短距离是%d米。 \n",map.pk[n-1].name,map.pk[m-1].name,D[n-1]);
pre=P[n-1];
printf("最短路径为: %s",map.pk[n-1].name);
while(pre>=0)
{
printf("-> %s",map.pk[pre].name);
pre=P[pre];
}
}
printf("\n");
system("pause");
}
鉴于兄弟姐妹们的需求,代码放这了,需要的复制,改动改动。
代码
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//顶点
#define BIG 100000
typedef struct
{
int num;
char name[100];
char features[200];
}Peak;
//图的存储
typedef struct
{
Peak pk[50];
int edges[200][200];
int v,e;//点和边数
}Graph;
static Graph map;
void menu1();//管理员菜单
void menu2();//游客菜单
void introduce();//景点介绍
void changes();//修改景点信息
void addspot();//增加景点信息
void deletespot();//删除景点信息
void addpath();//添加道路
void deletepath();//删除道路
void Dijkstra();//某景点到最短路径
void Floyed();//任意两景点
void changecode();//修改登录密码
void Listspot();//河北大学景点列表
void createspot();//创建景点的邻接链表
void Exit();//退出系统
char PASSCODE[20]="bao";
int main()
{
int n;
system("cls");
printf("\n\n\n");
printf("\t\t\t\t欢迎来到河北大学!这里是HBUGuide\n");
printf("\t\t\t\t善良美丽英俊的先生女士们,请选择您的身份\n");
printf("\t\t\t\t<1>进入管理员界面,请输入数字1\n");
printf("\t\t\t\t<2>进入游客界面,请输入数字2\n");
start: //重新输入
scanf("\t\t\t%d",&n);
if(n==1)
{
char pc[20];
printf("\t\t\t\t请输入管理员密码:");
scanf("%s",pc);
getchar();
while(strcmp(pc,PASSCODE)!=0)
{
printf("密码输入错误,请重新输入秘密:\n");
scanf("%s",pc);
}
if(strcmp(pc,PASSCODE)==0)
{
printf("身份验证正确,即将进入系统");
menu1();
}
}
else if(n==2)
{
menu2();
}
else
{
printf("输入错误,请重新输入1或2\n");
goto start;
}
return 0;
}
void menu1()
{
while(1)
{
int m;
system("cls");
printf("\t\t管理员操作界面\n");
printf("\t您好,欢迎光临!请问有什么可以帮您\n");
printf("\t<1>查看景点介绍\n");
printf("\t<2>修改景点信息\n");
printf("\t<3>增加景点信息\n");
printf("\t<4>删除景点信息\n");
printf("\t<5>增加景点道路\n");
printf("\t<6>删除景点道路\n");
printf("\t<7>去往某景最短\n");
printf("\t<8>两景最短路径\n");
printf("\t<9>修改登录密码\n");
printf("\t<10>退出管理系统\n");
scanf("%d",&m);
if(m==1)
{
introduce();
}
else if(m==2)
{
changes();
}
else if(m==3)
{
addspot();
}
else if(m==4)
{
deletespot();
}
else if(m==5)
{
addpath();
}
else if(m==6)
{
deletepath();
}
else if(m==7)
{
Dijkstra();
}
else if(m==8)
{
Floyed();
}
else if(m==9)
{
changecode();
}
else if(m==10)
{
Exit();
}
else
{
printf("您的输入有误,请输入1-10中的数字!");
system("pause");
}
}
}
void menu2()
{
while(1)
{
int a;
system("cls");
printf("\t\t游客操作界面\n");
printf("\t您好,欢迎光临!请问有什么可以帮您\n");
printf("\t<1>查看景点介绍\n");
printf("\t<2>去往某景最短\n");
printf("\t<3>两景最短路径\n");
printf("\t<4>退出系统\n");
scanf("%d",&a);
if(a==1)
{
introduce();
}
else if(a==2)
{
Dijkstra();
}
else if(a==3)
{
Floyed();
}
else if(a==4)
{
exit(0);
}
else
{
printf("您的输入有误");
system("pause");
}
}
}
void introduce()
{
createspot();
system("cls");
if(map.v==0)
{
printf("该地图暂时还没有景点哈!");
system("pause");
return;
}
Listspot();
printf("\n请输入你要看的景点代码: \n");
int n;
while(1)
{
scanf("%d",&n);
if(n<1||n>map.v)
{
printf("您的输入有误,请重新输入! \n");
}
else
break;
}
printf("%s: ",map.pk[n-1].name);
printf("%s\n",map.pk[n-1].features);
char flag;
printf("\n再次查询请按1,退出查询请按任意键\n");
scanf("%s",&flag);
if(flag==1)
introduce();
else
return 0;
}
void changes()//修改景点信息
{
createspot();
Listspot();
char inputname,outputname[200],inputfeatures[200];
int i=0,n,m,p,name;
printf("请输入你要修改的景点代码:(返回主菜单输入0)\n");
scanf("%d",&name);
while(1){
if(name==0){return;}
if(!(name<=map.v&&inputname>=1)){
printf("输入的景点信息有误,请重新输入:\n");
scanf("%d",&name);
}
else
break;
}
if(name<=map.v)
{
printf("该景点原来的名称为:\n");
printf("%s: ",map.pk[name-1].name);
printf("请输入新名称:\n");
scanf("%s",&outputname);
strcpy(map.pk[name-1].name,outputname);
printf("名称信息修改完成\n");
printf("该景点原来的景点信息为:\n");
printf("%s\n",map.pk[name-1].features);
printf("请输入新的景点介绍:\n");
scanf("%s",&inputfeatures);
strcpy(map.pk[name-1].features,inputfeatures);
printf("景点介绍修改完成,若需继续修改请输入1,返回主菜单请输入2\n");
scanf("%d",&p);
if(p==2){
return;
}
if(p==1){
changes();
return;
}
}
}
void addspot()
{
system("cls");
createspot();
if(map.v>100) {
printf("景点已到达最大限度,当前无法添加景点!\n");
system("pause");
return ;
}
char newName[200];
char newFeatures[1000];
printf("请输入您要添加的景点名:\n");
scanf("%s",newName);
getchar();
printf("请输入【%s】景点的介绍,最多可输入200字:\n",newName);
scanf("%s",newFeatures);
getchar();
int m=0;
int i;
Listspot();
printf("请输入新增景点的相邻景点个数:\n");
scanf("%d",&m);
while(m<0||m>map.v) {
printf("您的输入有误,请重新输入!\n");
scanf("%d",&m);
}
for(i=0; i<m; i++) {
int a,d;
printf("请输入第%d个相邻景点的代号:\n",i+1);
scanf("%d",&a);
while(a<=0||a>map.v||map.edges[a-1][map.v]!=BIG) {
if(a<=0||a>map.v)
printf("您的输入有误,请重新输入!范围在1~%d之间。\n",map.v);
if(map.edges[a-1][map.v]!=BIG)
printf("请不要输入重复的相邻景点,重新输入:\n");
scanf("%d",&a);
}
printf("请输入【%s】与【%s】之间的距离:\n",newName,map.pk[a-1].name);
scanf("%d",&d);
while(d<=0||d>=BIG) {
printf("您输入的距离有误!请重新输入:\n");
scanf("%d",&d);
}
map.edges[a-1][map.v]=map.edges[map.v][a-1]=d;
}
strcpy(map.pk[map.v].name,newName);
strcpy(map.pk[map.v].features,newFeatures);
map.v++;//景点数加1
map.e=map.e+m;//边数加m
printf("景点添加成功!\n");
system("pause");
}
void deletespot()
{
system("cls");
createspot();
if(map.v<1) {
printf("地图中没有任何景点,无法删除!\n");
system("pause");
return ;
}
Listspot();
printf("请输入您要删除的景点编号:(一定要是数字哦)\n");
int a;
scanf("%",&a);
getchar();
while(!(a>=1&&a<=map.v)) {
printf("您的输入有误,请重新输入!范围在1~%d之间。\n",map.v);
scanf("%d",&a);
getchar();
}
printf("您要删除的景点为:【%s】\n确认删除请按1,退出删除请按任意键\n",map.pk[a-1].name);
int flag;
scanf("%d",&flag);
if(flag==1) {
int i,j;
int cnt=0;
for(i=0; i<map.v; i++) {
if(map.edges[a-1][i]!=BIG)
cnt++;
}
for(i=a-1; i<map.v; i++) {
map.pk[i]=map.pk[i+1];
}
//删除该节点在二维数组中所对应的列
for(i=0; i<map.v; i++) {
for(j=a-1; j<map.v; j++)
map.edges[i][j]=map.edges[i][j+1];
}
//删除该节点在二维数组中所对应的行
for(i=0; i<map.v; i++) {
for(j=a-1; j<map.v; j++)
map.edges[j][i]=map.edges[j+1][i];
}
map.v--;//节点数减1
map.e-=cnt;//边数减cnt
} else
return ;
printf("景点删除成功!\n");
system("pause");
}
void addpath()
{
system("cls");
createspot();
Listspot();
if(map.v<=0||map.v==1)
{
printf("无景点或景点太少的缘故,该地图无法添加道路!\n");
system("pause");
}
if(map.e==0)
printf("当前地图无道路!\n");
else
printf("当前地图有%d条道路",map.e);
printf("请问您要添加的两个景点代号,输入1-%d的数字哦!\n",map.v);
int a,b;
scanf("%d %d",&a,&b);
while(a<1||a>map.v||b<1||b>map.v)
{
if(a==b)
printf("您输入的景点代号相同,请重新输入!\n");
else
printf("您的输入有误,请输入1-%d范围的数字,并用空格分开代号,重新输入!\n",map.v);
scanf("%d %d",&a,&b);
}
if(map.edges[a-1][b-1]!=BIG)
{
printf("【%s】与【%s】之间已经存在一条道路,无需再次添加!\n",map.pk[a-1].name,map.pk[b-1].name);
}
else
{
int d;
printf("请输入【%s】和【%s】之间道路的长度: \n",map.pk[a-1].name,map.pk[b-1].name);
scanf("%d",&d);
while(d<0||d>=BIG)
{
printf("您输入的长度有误,请重新输入!\n");
scanf("%d",&d);
}
map.edges[a-1][b-1]=map.edges[b-1][a-1]=d;
map.e++;
printf("恭喜您,累死累活的,道路终于添加成功咯!\n");
}
system("pause");
}
void deletepath()
{
system("cls");
createspot();
Listspot();
if(map.v<=0) {
printf("地图中没有景点,无法删除道路!\n");
}
if(map.e<=0) {
printf("地图中没有道路,无法删除!\n");
}
printf("当前地图中一共有%d条道路\n",map.e);
printf("请输入您要删除的道路对应的两个景点代号,中间使用空格隔开:\n");
int a,b;
scanf("%d %d",&a,&b);
getchar();
while(a<1||a>map.v||b<1||b>map.v||a==b) {
if(a==b)
printf("您输入的景点代号相同,请重新输入!\n");
else
printf("您的输入有误,请重新输入!范围在1~%d之间。\n",map.v);
scanf("%d %d",&a,&b);
getchar();
}
if(map.edges[a-1][b-1]>=BIG) {
printf("%s与%s之间没有道路,无法删除!\n",map.pk[a-1].name,map.pk[b-1].name);
}
else {
printf("您确定要删除【%s】与【%s】之间的道路吗?\n",map.pk[a-1].name,map.pk[b-1].name);
printf("按1确认删除,按任意键退出!\n");
int flag;
scanf("%d",&flag);
if(flag==1) {
map.edges[a-1][b-1]=map.edges[b-1][a-1]=BIG;
map.e--;
}
else
return ;
printf("道路删除成功!\n");
}
system("pause");
}
void Exit()
{
printf("\n【提示】:\n退出系统之后,之前所有的操作均会恢复到初始默认值.\n");
printf("确认退出该系统请按1,按任意键体制当前退出操作.\n");
int judge;
scanf("%d",&judge);
if(judge==1)
{
system("cls");
exit(0);
}
}
void Dijkstra()
{
int m,i,n,k,pre;
int D[100]; //存放原点到终点最短路径长度
int P[100]; //相应最短路径终点的前驱点
int S[100]; //存放原位置和目的点
int min;
system("cls");
createspot();
Listspot();
printf("请输入您所在的景点编号,亲~:");
scanf("%d",&m);
while(m<1||m>map.v)
{
printf("输入格式不对哦,请输入1到%d之间的数字编号,重新输入!\n",map.v);
scanf("%d",&m);
}
S[m-1]=1; //对其初始化
for(i=1;i<map.v;i++)
{
D[i]=map.edges[m-1][i];
P[i]=m-1;
S[i]=0;
}
//初始化所在位置点
D[m-1]=0;
S[m-1]=1;
P[m-1]=-1;
for(i=0;i<map.v;i++)
{ //主循环,每次求得原位置到某点最短路径,并将其加入到S中
min=BIG+1; //为了将没有路径的点最后选中,初始化+1
for(n=1;n<map.v;n++) //从未进入S的点中找最小D[n]
{
if(S[n]==0&&D[n]<min) //n没进入S且路径更短
{
k=n; //具有更小路径点存在k中
min=D[n];
}
}
S[k]=1; //存到S中
for(n=0;n<map.v;n++) //更新其他没进S的当前最短路径以及长度
{
if(S[n]==0&&(D[k]+map.edges[k][n]<D[n])) //对n在过程的点
{
D[n]=D[k]+map.edges[k][n]; //修改为更短路径长度
P[n]=k; //记忆,将n前驱换为k
}
}
}
int judge=1;
for(i=1;i<map.v;i++) //输出各最短路径长度及路径上结点
{
if(i!=m-1)
{
if(D[i]!=BIG)
{
judge=0;
printf("距离%d米: %s",D[i],map.pk[i].name);
pre=P[i];
while(pre>=0)
{
printf(" <-%s",map.pk[pre].name);
pre=P[pre];
}
printf("\n");
}
}
}
if(judge)
printf("[%d]景点与任何景点都没有可通道路,故无法查询最短路径!\n",map.pk[m-1].name);
system("pause");
}
void Floyed()
{
int m,i,n,k,pre;
int D[100]; //存放原点到终点最短路径长度
int P[100]; //相应最短路径终点的前驱点
int S[100]; //存放原位置和目的点
int min;
system("cls");
createspot();
Listspot();
printf("请输入您要查询距离的两个景点代号,中间用空格隔开:\n");
scanf("%d %d",&m,&n);
while(m<1||m>map.v||n<1||n>map.v)
{
printf("您的输入有误,请重新输入!范围在1~%d之间。\n",map.v);
scanf("%d %d",&m,&n);
}
S[m-1]=1; //对其初始化
for(i=1;i<map.v;i++)
{
D[i]=map.edges[m-1][i];
P[i]=m-1;
S[i]=0;
}
//初始化所在位置点
D[m-1]=0;
S[m-1]=1;
P[m-1]=-1;
for(i=0;i<map.v;i++)
{ //主循环,每次求得原位置到某点最短路径,并将其加入到S中
min=BIG+1; //为了将没有路径的点最后选中,初始化+1
for(n=1;n<map.v;n++) //从未进入S的点中找最小D[n]
{
if(S[n]==0&&D[n]<min) //n没进入S且路径更短
{
k=n; //具有更小路径点存在k中
min=D[n];
}
}
S[k]=1; //存到S中
for(n=0;n<map.v;n++) //更新其他没进S的当前最短路径以及长度
{
if(S[n]==0&&(D[k]+map.edges[k][n]<D[n])) //对n在过程的点
{
D[n]=D[k]+map.edges[k][n]; //修改为更短路径长度
P[n]=k; //记忆,将n前驱换为k
}
}
}
if(D[n-1]==BIG)
printf("【%s】与【%s】任何景点之间都没有可通道路!\n",map.pk[m-1].name,map.pk[n-1].name);
else
{
printf("【%s】->【%s】的最短距离是%d米。 \n",map.pk[n-1].name,map.pk[m-1].name,D[n-1]);
pre=P[n-1];
printf("最短路径为: %s",map.pk[n-1].name);
while(pre>=0)
{
printf("-> %s",map.pk[pre].name);
pre=P[pre];
}
}
printf("\n");
system("pause");
}
void changecode()
{
char newcode[20];
printf("请输入您要修改成的新密码: \n");
scanf("%s",newcode);
strcpy(PASSCODE,newcode);
printf("密码修改成功!请记住您的新密码! \n");
printf("*提示* 新密码将会在您下一次进入该程序时恢复初始系统默认密码");
system("pause");
}
//河大景点列表
void Listspot()
{
if(map.v==0)
{
printf("当前地图没有景点!\n\n");
system("pause");
return ;
}
if(map.v>0)
printf("河北大学有当前以下景点: \n\n");
int i;
for(i=0;i<map.v;i++)
{
printf("\t<%d>%s\n",i+1,map.pk[i].name);
}
}
//景点邻接链表
void createspot()
{
map.v=31;
map.e=54;
int i,j,k;
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
map.edges[i][j]=BIG;
}
}
strcpy(map.pk[0].name,"校医院");
strcpy(map.pk[0].features,"众所周知,医院是个看病的地方");
strcpy(map.pk[1].name,"生科院");
strcpy(map.pk[1].features,"生科院学生的院楼");
strcpy(map.pk[2].name,"逸夫楼");
strcpy(map.pk[2].features,"学习圣地");
strcpy(map.pk[3].name,"南二门口");
strcpy(map.pk[3].features,"从这里应该是可以出校门的");
strcpy(map.pk[4].name,"北一门口");
strcpy(map.pk[4].features,"从这里应该是可以出校门的");
strcpy(map.pk[5].name,"文苑楼");
strcpy(map.pk[5].features,"学习圣地");
strcpy(map.pk[6].name,"南院餐厅");
strcpy(map.pk[6].features,"用来填饱肚子的地方");
strcpy(map.pk[7].name,"第七教学楼");
strcpy(map.pk[7].features,"美丽帅气的小哥哥小姐姐上课的地方");
strcpy(map.pk[8].name,"综合教学楼");
strcpy(map.pk[8].features,"美丽帅气的小哥哥小姐姐上课的地方");
strcpy(map.pk[9].name,"第八教学楼");
strcpy(map.pk[9].features,"美丽帅气的小哥哥小姐姐上课的地方");
strcpy(map.pk[10].name,"第九教学楼");
strcpy(map.pk[10].features,"美丽帅气的小哥哥小姐姐上课的地方");
strcpy(map.pk[11].name,"国际交流学院");
strcpy(map.pk[11].features,"国际交流学院的院楼");
strcpy(map.pk[12].name,"毓秀园");
strcpy(map.pk[12].features,"学生们生活起居的地方");
strcpy(map.pk[13].name,"主楼");
strcpy(map.pk[13].features,"河北大学的门面");
strcpy(map.pk[14].name,"多功能馆");
strcpy(map.pk[14].features,"人如其名,此馆具有多项功能");
strcpy(map.pk[15].name,"北2门口");
strcpy(map.pk[15].features,"从这里应该是可以出校门的");
strcpy(map.pk[16].name,"图书馆");
strcpy(map.pk[16].features,"校园最具学习氛围的地方,你可以在这里自习也可以在这里看书,这里有着十分丰富的书籍资源,凭借学生卡可以自由出入,是学生学习打卡的宝地之一");
strcpy(map.pk[17].name,"南一门口");
strcpy(map.pk[17].features,"从这里应该是可以出校门的");
strcpy(map.pk[18].name,"物理学院");
strcpy(map.pk[18].features,"能进这里的都是我们学校物理系的学子,里面有着一些十分精密的仪器,不可随意出入");
strcpy(map.pk[19].name,"竞学楼");
strcpy(map.pk[19].features,"这里有很多自习室,没课的时候可以来这里自习呀");
strcpy(map.pk[20].name,"电信学院");
strcpy(map.pk[20].features,"能进这里的都是我们学校电信系的学子,里面有着一些十分精密的仪器,不可随意出入");
strcpy(map.pk[21].name,"化学学院");
strcpy(map.pk[21].features,"能进这里的都是我们学校化学系的学子,里面有着一些十分精密的仪器,不可随意出入");
strcpy(map.pk[22].name,"建工学院");
strcpy(map.pk[20].features,"能进这里的都是我们学校建工系的学子,里面有着一些十分精密的仪器,不可随意出入");
strcpy(map.pk[23].name,"理化中心");
strcpy(map.pk[23].features,"本宝宝也不太清楚这里是干啥的呢QAQ");
strcpy(map.pk[24].name,"北院餐厅");
strcpy(map.pk[24].features,"这里有着十分丰富的菜品,来自各地的美食应有尽有,闲暇之余也可以来这里喝一杯奶茶小憩时光");
strcpy(map.pk[25].name,"篮球场网球场");
strcpy(map.pk[25].features,"每天傍晚这里都会有很多小哥哥小姐姐在这里打篮球打羽毛球,小哥哥小姐姐们人很好,赶快来加入他们吧");
strcpy(map.pk[26].name,"操场");
strcpy(map.pk[26].features,"有句老话说得好,身体是革命的本钱,学习固然重要,但是你的身体更重要,空闲时间多来操场锻炼身体鸭!");
strcpy(map.pk[27].name,"学生宿舍梅园1号");
strcpy(map.pk[27].features,"学生们生活起居的地方");
strcpy(map.pk[28].name,"宿舍梅园2号");
strcpy(map.pk[28].features,"学生们生活起居的地方");
strcpy(map.pk[29].name,"宿舍梅园3,4,5号");
strcpy(map.pk[29].features,"学生们生活起居的地方");
strcpy(map.pk[30].name,"宿舍梅园6号");
strcpy(map.pk[30].features,"学生们生活起居的地方");
//边的权重长度赋值
map.edges[0][1]=map.edges[1][0]=82;
map.edges[1][2]=map.edges[2][1]=92;
map.edges[1][22]=map.edges[22][1]=111;
map.edges[2][3]=map.edges[3][2]=93;
map.edges[2][21]=map.edges[21][2]=178;
map.edges[2][23]=map.edges[23][2]=105;
map.edges[2][21]=map.edges[21][2]=178;
map.edges[3][4]=map.edges[4][3]=37;
map.edges[3][17]=map.edges[17][3]=202;
map.edges[3][18]=map.edges[18][3]=179;
map.edges[4][5]=map.edges[5][4]=60;
map.edges[4][16]=map.edges[16][4]=134;
map.edges[4][15]=map.edges[15][4]=210;
map.edges[5][6]=map.edges[6][5]=93;
map.edges[5][9]=map.edges[9][5]=44;
map.edges[6][7]=map.edges[7][6]=150;
map.edges[6][8]=map.edges[8][6]=110;
map.edges[6][9]=map.edges[9][6]=75;
map.edges[7][8]=map.edges[8][7]=144;
map.edges[8][9]=map.edges[9][8]=42;
map.edges[9][10]=map.edges[10][9]=87;
map.edges[10][11]=map.edges[11][10]=167;
map.edges[10][12]=map.edges[12][10]=20;
map.edges[10][13]=map.edges[13][10]=190;
map.edges[10][16]=map.edges[16][10]=78;
map.edges[11][12]=map.edges[12][11]=139;
map.edges[12][13]=map.edges[13][12]=20;
map.edges[13][14]=map.edges[14][13]=91;
map.edges[13][15]=map.edges[15][13]=114;
map.edges[14][15]=map.edges[15][14]=96;
map.edges[15][16]=map.edges[16][15]=77;
map.edges[17][18]=map.edges[18][17]=59;
map.edges[17][19]=map.edges[19][17]=56;
map.edges[18][19]=map.edges[19][18]=53;
map.edges[18][21]=map.edges[21][18]=57;
map.edges[19][20]=map.edges[20][19]=115;
map.edges[20][21]=map.edges[21][20]=108;
map.edges[20][24]=map.edges[24][20]=102;
map.edges[20][25]=map.edges[25][20]=15;
map.edges[20][26]=map.edges[26][20]=70;
map.edges[21][24]=map.edges[24][21]=114;
map.edges[21][22]=map.edges[22][21]=91;
map.edges[22][23]=map.edges[23][22]=80;
map.edges[22][24]=map.edges[24][22]=84;
map.edges[24][25]=map.edges[25][24]=25;
map.edges[24][30]=map.edges[30][24]=44;
map.edges[25][26]=map.edges[26][25]=5;
map.edges[25][29]=map.edges[29][25]=20;
map.edges[25][30]=map.edges[30][25]=49;
map.edges[26][27]=map.edges[27][26]=10;
map.edges[26][28]=map.edges[28][26]=10;
map.edges[27][28]=map.edges[28][27]=134;
map.edges[28][29]=map.edges[29][28]=20;
map.edges[29][30]=map.edges[30][29]=92;
}