校园导游咨询
作者:互联网
#include<stdio.h>
#include<iostream>
#include<cstring>
#define inf 9999
using namespace std;
typedef struct {
char name[1010];
char number[1010];
char Introduce[1010];
}info;
typedef struct {
info place[30];
int w[30][30];
}graph;
int Path[30][30];
int D[30][30];
void ShortestPath_Floyd(graph g,int n){//最短路径
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
D[i][j]=g.w[i][j];
if(D[i][j]<inf&&i!=j) Path[i][j]=j;
else Path[i][j]=-1;
}
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(D[i][k]+D[k][j]<D[i][j]){
D[i][j]=D[i][k]+D[k][j];
Path[i][j]=Path[i][k];
}
}
}
}
}
int findorder(graph g,int n,char str[])
{
for(int i=1;i<=n;i++)
{
if(strcmp(g.place[i].name,str)==0){
return i;
}
}
}
void Pathprint(graph g,int s,int e){
int next=s;
while(next!=e){
printf("%s->",g.place[next].name);
next=Path[next][e];
}
printf("%s\n",g.place[next].name);
}
void PrintPath(graph g,int n){
ShortestPath_Floyd(g,n);
int s,e;
char str1[110],str2[110];
scanf("%s%s",&str1,&str2);
s=findorder(g,n,str1);
e=findorder(g,n,str2);
printf("%d\n",D[s][e]);
Pathprint(g,s,e);
}
void print(graph g,int n,char name[])
{
for(int i=1;i<=n;i++)
{
if(strcmp(g.place[i].name,name)==0)
printf("%s %s %s\n",g.place[i].number,g.place[i].name,g.place[i].Introduce);
}
}
void modify(graph &g,int n,char a[])
{
for(int i=1;i<=n;i++)
{
if(strcmp(g.place[i].name,a)==0)
{
scanf("%s",g.place[i].number);
scanf("%s",g.place[i].name);
scanf("%s",g.place[i].Introduce);
break;
}
}
}
int main(){
int n,m,op,a,b,ww,x;
char str1[110],str2[110];
graph g;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",g.place[i].number);
scanf("%s",g.place[i].name);
scanf("%s",g.place[i].Introduce);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j){
g.w[i][j]=0;
D[i][j]=0;
}
else{
g.w[i][j]=inf;
D[i][j]=inf;
}
}
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&ww);
g.w[a][b]=ww;
g.w[b][a]=ww;
}
scanf("%d",&op);
while(op--)
{
scanf("%s",&str1);
if(strcmp(str1,"Query")==0)
{
scanf("%d",&x);
if(x==1)
{
scanf("%s",&str2);
print(g,n,str2);
}
else {
PrintPath(g,n);
}
}
else if(strcmp(str1,"Modify")==0){
scanf("%s",&str2);
modify(g,n,str2);
}
}
return 0;
}
标签:name,int,graph,30,校园,导游,next,char,咨询 来源: https://blog.csdn.net/weixin_43956284/article/details/104847886