题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=2112
思路
无向图 最多 150个节点
这里有几个需要注意的地方 :
1 重边
2 根本就没有这个站点
PS:检查了好久 最后发现 是没有这个站点这种情况没有可考虑到
AC代码
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<cstring>
using namespace std;
const int maxn = 155;
const int inf = 1e8;
int mapp[maxn][maxn];
int dis[maxn];
int mark[maxn];
void dijkstra(int s,int n)
{
dis[s]=0;
for(int i=0;i<n;i++)
{
int m=inf,v;
for(int i=0;i<n;i++)
if(!mark[i]&&dis[i]<m)
m=dis[v=i];
mark[v]=1;
for(int i=0;i<n;i++)
if(mapp[v][i]<inf&&!mark[i])
dis[i]=min(dis[i],dis[v]+mapp[v][i]);
}
}
int main()
{
//freopen("C:\\Users\\12893\\Desktop\\in.txt","r",stdin);
int n,w;
string s;
string e;
string ss;
string ee;
while(scanf("%d",&n)&&n!=-1)
{
int d=0;
for(int i=0;i<maxn;i++)
{
dis[i]=inf;
mark[i]=0;
for(int j=0;j<maxn;j++)
mapp[i][j]=inf;
}
map<string,int> map1;
cin>>ss>>ee;
while(n--)
{
cin>>s>>e>>w;
if(map1[s]==0)
map1[s]=++d;
if(map1[e]==0)
map1[e]=++d;
mapp[map1[s]][map1[e]]=min(w,mapp[map1[s]][map1[e]]);
mapp[map1[e]][map1[s]]=min(mapp[map1[e]][map1[s]],w);
}
dijkstra(map1[ss],d+1);
if(dis[map1[ee]]==inf||map1[ee]==0)
cout<<-1;
else
cout<<dis[map1[ee]];
cout<<endl;
}
return 0;
}
FINISHED!