http://acm.hdu.edu.cn/showproblem.php?pid=2112
开始时对map<string,int>传入了char[ ],wa了很多次。。
#pragma warning (disable:4786)
#include<iostream>
#include<string>
#include <map>
using namespace std;
#define INF 999999999
int visit[155];
int time[155][155];
void Dijsktra(int length){
int i,min=INF,k;
visit[0] = 1;
while(1){
min=INF;
for(i=0;i<length;i++){
if(!visit[i]&&time[0][i]<min){
min=time[0][i];
k=i;
}
}
if(min==INF)
break;
visit[k]=1;
if(k==1){
cout<<min<<endl;
break;
}
for(i=0;i<length;i++){
if(!visit[i]){
if(time[0][i]>time[0][k]+time[k][i]){
time[0][i]=time[0][k]+time[k][i];
time[i][0]=time[0][k]+time[k][i];
}
}
}
}
if(k!=1) cout<<"-1"<<endl;
}
int main(){
int n,length,i,j;
//map的使用
map<string,int>mp;
string start,end;
while(cin>>n&&n!=-1){
mp.clear();
cin>>start>>end;
mp[start]=1;
mp[end]=2;
length=2;
for(i=0;i<155;i++){
visit[i]=0;
for(j=i;j<155;j++){
if(i==j)
time[i][j]=0;
else {
time[i][j]=INF;
time[j][i]=INF;
}
}
}
string a,b;
int t;
for(i=0;i<n;i++){
cin>>a>>b>>t;
//若该键不存在,返回0
if(!mp[a])
mp[a]=++length;
if(!mp[b])
mp[b]=++length;
if(time[mp[a]-1][mp[b]-1]>t){
time[mp[a]-1][mp[b]-1]=t;
time[mp[b]-1][mp[a]-1]=t;
}
}
if(start==end)
cout<<"0"<<endl;
else Dijsktra(length);
}
return 0;
}