其他分享
首页 > 其他分享> > 校园导游咨询

校园导游咨询

作者:互联网

#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