最短路,直接用map+Floyd直接暴力就行
问题
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<map>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
#define mem(a,b) memset(a,b,sizeof(a))
const int Max=60;
map<char,int>mp;
map<int,char>mp1;
int road[Max][Max];
void init()
{
mem(road,INF);
for(int i=0; i<60; i++)
road[i][i]=0;
}
void Floyd()
{
for(int k=1;k<=52;k++)
{
for(int i=1;i<=52;i++)
{
for(int j=1;j<=52;j++)
{
if(i==j)
continue;
road[i][j]=min(road[i][j],road[i][k]+road[k][j]);
}
}
}
}
int main()
{
int n,c;
char a='a',b='A';
for(int i=1;i<=26;i++)
mp[a++]=i;
for(int i=27;i<=52;i++)
mp[b++]=i;
char s='A';
for(int i=27;i<=52;i++)
{
mp1[i]=s++;
}
scanf("%d",&n);
init();
getchar();
for(int i=0; i<n; i++)
{
scanf("%c %c %d",&a,&b,&c);
getchar();
road[mp[a]][mp[b]]=min(road[mp[a]][mp[b]],c);
road[mp[b]][mp[a]]=road[mp[a]][mp[b]];
}
Floyd();
int ans=INF,mark;
for(int i=27; i<=51; i++)
{
if(road[i][52]<ans)
{
ans=road[i][52];
mark=i;
}
}
printf("%c %d\n",mp1[mark],ans);
return 0;
}