#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
#define inf 0x3f3f3f3f
int cast[205], vis[205], cnt;
int a[205][205];
void Dijkstra(int s,int e) {
int i, j, min ,pos;
memset(vis,0,sizeof(vis));
for(i = s; i <= e; i++)
cast[i] = (i == s ? 0 : inf);
for(i = s; i <= e; i++) {
min = inf;
for(j = s; j <= e; j++) {
if(cast[j] < min && !vis[j]) {
pos = j;
min = cast[j];
}
}
vis[pos] = 1;
if(min == inf)
break;
for(j = s; j <= e; j++) {
if(cast[pos]+a[pos][j] < cast[j] && !vis[j])
cast[j] = cast[pos]+a[pos][j];
}
}
}
int main() {
//freopen("data.in", "r", stdin);
map<string,int> mat;//在这里mat的作用是将字符串化为整数存储,然后进行dijkstra就可以解决问题
char s1[100], s2[100];
int i, cnt, flag,n,j;
while(~scanf("%d",&n) && n>0) {
mat.clear();
memset(a, inf, sizeof(a));
flag = 0;
scanf("%s%s", s1, s2);
if(!strcmp(s1, s2))
flag = 1;
mat[s1] = 1;
mat[s2] = 2;
cnt = 3;
for(i = 0; i<n; i++) {
int k;
scanf("%s%s%d", s1, s2, &k);
if(!mat[s1])
mat[s1] = cnt++;
if(!mat[s2])
mat[s2] = cnt++;
if(k < a[mat[s1]][mat[s2]])
a[mat[s1]][mat[s2]] = a[mat[s2]][mat[s1]] = k;
}
if(flag) {
printf("0\n");
continue;
}
Dijkstra(1, cnt-1);
printf("%d\n",cast[2] == inf ? -1: cast[2]);
}
return 0;
}
HDU 2112 today(dij)
猜你喜欢
转载自blog.csdn.net/ccshijtgc/article/details/83268660
今日推荐
周排行