您的位置:首页 > 其它

Hdu Oj 2112 HDU Today

2015-08-20 10:45 330 查看
题目:点击打开链接

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<queue>
#include<map>
#define INF 0x3f3f3f3f
using namespace std;
struct Edge
{
int from,to,value,next;
}edge[20005];
int head[155],num;
int d[155],used[155];
char str1[35],str2[35];
void init()
{
num=0;
memset(head,-1,sizeof(head));
}
void add(int a,int b,int c)
{
edge[num].from=a;
edge[num].to=b;
edge[num].value=c;
edge[num].next=head[a];
head[a]=num++;
}
void spfa(int n)
{
queue<int>q;
for(int i=1;i<=n;i++)//小优化
{
d[i]=INF;
used[i]=0;
}
d[1]=0;
used[1]=1;
q.push(1);
while(!q.empty())
{
int u=q.front();
q.pop();
used[u]=0;
for(int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to;
if(d[v]>d[u]+edge[i].value)
{
d[v]=d[u]+edge[i].value;
if(!used[v])
{
used[v]=1;
q.push(v);
}
}
}
}
}
int main()
{
int m;
while(scanf("%d",&m),m!=-1)
{
getchar();
init();
int i,j;
int flag=0;
map<string,int>mp;
mp.clear();
scanf("%s%s",str1,str2);
if(strcmp(str1,str2))
flag=1;
mp[str1]=1;
mp[str2]=2;
int count =3,c;
for(i=0;i<m;i++)
{
getchar();
scanf("%s%s%d",str1,str2,&c);
if(!mp[str1])
mp[str1]=count++;
if(!mp[str2])
mp[str2]=count++;
add(mp[str1],mp[str2],c);
add(mp[str2],mp[str1],c);
}
if(!flag)
{
printf("0\n");
}
else//小优化
{
spfa(count-1);
if(d[2]==INF)
printf("-1\n");
else
printf("%d\n",d[2]);
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: