#define Mvnum 100
//#define char Vertextype
//#define int Arctype
#include<iostream>
#include<cstdio>
#include<malloc.h>
using namespace std;
int messnum=10;
typedef struct message
{
int num;//景点代码
char name[100];//景点名称
char pro[500];//简介
}Ciceroni;
Ciceroni school[100]={
{1,"1教A楼\n","学子上英语和文政课的地方10层"},
{2,"2教B楼\n","学子上理科的地方"},
{3,"成栋实验楼,信息分院办公室所在地\n","新校区的实验楼,主要是信息院"},
{4,"老食堂俭德园","老食堂,在老校区,离宿舍楼比较近"},
{5,"新食堂颐丰园","在新校区的新食堂,食物比较美味,环境优雅"},
{6,"工科实习中心\n","工科学生金工实习的地方"},
{7,"帽儿山\n","哈尔滨著名旅游景点,有玻璃桥,风景优雅"},
{8,"林新体体育馆\n","体育馆,有篮球场羽毛球场,也用作开一些会议和讲座等"},
{9,"逸夫实验楼\n","逸夫实验基地"},
{10,"文博楼\n","文博实验基地"},
{11,"知园\n","花草茂盛,郁郁葱葱的小园林"},
};
//
typedef struct
{
char vexs[Mvnum];
int arcs[Mvnum][Mvnum];
int vexnum,arcnum;
}AMGraph;
AMGraph NEFU;
int D[Mvnum][Mvnum];
int Path[Mvnum][Mvnum];
void Floyd();
void display();
void update();
void tip()
{ int flag;
cout<<"\n **************\n\n 1查询景点信息,\n 2查询两景点最短路径,\n";
cout<<" 3查询景点到其他景点最短路径,\n 4修改景点信息"<<endl;
while(cin>>flag)
{
if(flag==1)
display();
if(flag==2)
{
Floyd();
int a,b;
cout<<"输入两个景点编号"<<endl;
cin>>a>>b;
a--;b--;
cout<<D[a][b]<<endl;
}
if(flag==3)
{
Floyd();
int a;
cout<<"输入景点编号"<<endl;
cin>>a;
a--;
for(int i=0;i<=messnum;i++)
cout<<a+1<<"到"<<i+1<<":"<<D[a][i]<<endl;
}
if(flag==4)
{
update();
}
cout<<"\n **************\n\n 1查询景点信息,\n 2查询两景点最短路径,\n";
cout<<" 3查询景点到其他景点最短路径,\n 4修改景点信息"<<endl;
}
}
void Assignment() //给景点赋值的函数
{char judge;
for(int i=0;i<=messnum;i++)
{ for(int j=0;j<=messnum;j++)
{NEFU.arcs[i][j]=10000000;}//表示无穷}
NEFU.arcs[i][i]=0; //就自己而言路径为0;
}
NEFU.arcs[1][2]=NEFU.arcs[2][1]=10;
NEFU.arcs[2][3]=NEFU.arcs[3][2]=70;
NEFU.arcs[3][5]=NEFU.arcs[5][3]=20;
NEFU.arcs[2][4]=NEFU.arcs[4][2]=50;
NEFU.arcs[5][6]=NEFU.arcs[6][5]=300;
NEFU.arcs[5][7]=NEFU.arcs[7][5]=1000;
NEFU.arcs[3][8]=NEFU.arcs[8][3]=10;
NEFU.arcs[3][10]=NEFU.arcs[10][3]=10;
NEFU.arcs[9][11]=NEFU.arcs[11][9]=15;
NEFU.arcs[2][11]=NEFU.arcs[11][2]=33;
NEFU.arcs[6][7]=NEFU.arcs[7][6]=2000;
}
void update()
{char judge;
int allflag;
cout<<"1修改信息,2添加信息"<<endl;
cin>>allflag;
if(allflag==1){do{
int id,flag;
cout<<"请输入要修改的编号"<<endl;
cin>>id;
cout<<"请输入修改内容1 景点名称 2景点简介 "<<endl;
cin>>flag;
id--;
if(flag==1)
{ cout<<"输入新景点名称"<<endl;
cin>>school[id].name;
}
if(flag==2)
{
cout<<"输入新的景点简介"<<endl;
cin>>school[id].pro;
}
cout<<"是否继续修改(Y/N)"<<endl;
cin>>judge;
}while(judge=='Y'||judge=='y');
}
else if(allflag==2)
{ do{
messnum++;
cout<<"添加信息编号为:"<<messnum+1<<endl;
school[messnum].num=messnum+1;
cout<<"请输入名称"<<endl;
cin>>school[messnum].name;
cout<<"请输入简介"<<endl;
cin>>school[messnum].pro;
cout<<"是否继续Y/N"<<endl;
cin>>judge;
}while(judge=='Y'||judge=='y');
}
}
void display()
{
int m;
cout<<"请输入你要查询的景点编号,0查询所有";
cin>>m;
if(m==0)
{
for(int i=0;i<=messnum;i++)
{ cout<<endl;
cout<<school[i].num<<":"<<school[i].name<<"--->"<<school[i].pro<<endl;
}
}
else
{
m--;
cout<<endl;
cout<<school[m].num<<":"<<school[m].name<<"--->"<<school[m].pro<<endl;
}
}
void Floyd()
{ Assignment();
for(int i=0;i<=messnum;i++)
for(int j=0;j<=messnum;j++)
{
D[i][j]=NEFU.arcs[i][j];
if(D[i][j]<100000)
Path[i][j]=-i;
else Path[i][j]=-1;
}
for(int k=0;k<=messnum;k++)
for(int i=0;i<=messnum;i++)
for(int j=0;j<=messnum;j++)
{
if(D[i][k]+D[k][j]<D[i][j])
{D[i][j]=D[i][k]+D[k][j];
Path[i][j]=Path[k][j];}
}
}
int main()
{
Floyd();
tip();
//for(int i=0;i<=messnum;i++)
// for(int j=0;j<=messnum;j++)
// cout<<NEFU.arcs[i][j]<<" ";
return 0;
}
Floyd--景点寻路
最新推荐文章于 2020-12-23 09:15:24 发布