HDU2112——HDU Today(map容器+spfa)
来源:互联网 发布:linux开发环境 编辑:程序博客网 时间:2024/05/22 12:20
难点:就是把字符串换成编号,用数组会超时,所以用map容器。其他的地方就和正常的spfa一样
代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#define inf 100000000
using namespace std;
struct node
{
int next,to,weight;
}road[100050];
int head[10050];
int mark[10050];
int dis[10050];
int n;
char start[35];char en[35];
char s[35],e[35];int w;int cur,cut;
void init()
{
memset(road,0,sizeof(road));
memset(mark,0,sizeof(mark));
memset(start,'\0',sizeof(start));
memset(en,'\0',sizeof(en));
for(int i=0;i<n;i++)
{
head[i]=-1;
dis[i]=inf;
}
cur=1;cut=0;
}
void add(int a,int b,int c)
{
road[cut].weight=c;
road[cut].to=b;
road[cut].next=head[a];
head[a]=cut++;
}
void spfa(int u)
{
queue<int>q;
mark[u]=1;
dis[u]=0;
while(!q.empty()) q.pop();
q.push(u);
int i,l;
while(!q.empty())
{
l=q.front();
q.pop();
mark[l]=0;
for(i=head[l];i+1;i=road[i].next)
{
if(dis[l]+road[i].weight<dis[road[i].to])
{
dis[road[i].to]=dis[l]+road[i].weight;
if(mark[road[i].to]==0)
{
q.push(road[i].to);
mark[road[i].to]=1;
}
}
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
init();
if(n==-1) break;
map<string,int>mp;
scanf("%s%s",start,en);
if(mp[start]==0) mp[start]=cur++;
if(mp[en]==0) mp[en]=cur++;
for(int i=0;i<n;i++)
{
scanf("%s%s%d",s,e,&w);
if(mp[s]==0) mp[s]=cur++;
if(mp[e]==0) mp[e]=cur++;
int x=mp[s];int y=mp[e];
add(x,y,w);
add(y,x,w);
}
int xx=mp[start];int yy=mp[en];
if(xx==yy)
{
printf("0\n");
continue;
}
spfa(xx);
if(dis[yy]>=inf) printf("-1\n");
else printf("%d\n",dis[yy]);
}
return 0;
}
- HDU2112——HDU Today(map容器+spfa)
- HDU2112---HDU Today(dijkstra)&&(map+SPFA)
- hdu2112 HDU Today (floyd+stl-map)
- hdu2112 HDU Today(dijkstra+map)
- HDU2112 HDU Today(关于最短路和map)
- hdu 2112 HDU Today(SPFA+map)
- hdu 2112 HDU Today 最短路spfa+容器map
- HDU——2112HDU Today(SPFA+简单Hash或map+前向星)
- hdu2112 HDU Today (最短路之dijkstra和spfa)
- 最短路径——Floyd算法HDU Today(hdu2112)
- 最短路径——Dijkstra算法HDU Today(hdu2112)
- HDU2112 HDU Today(最短路径)
- HDU today(HDU2112)
- hdu2112-HDU Today
- hdu2112 HDU Today
- hdu2112 HDU Today (Dijkstra)
- HDU2112:HDU Today
- HDU2112:HDU Today(Dijkstra)
- iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD
- django框架使用angular js入门
- android中的文本框
- java代码的编译和执行过程
- ora-00054
- HDU2112——HDU Today(map容器+spfa)
- PAT (Basic Level) Practise (中文)1013. 数素数 (20) C语言
- 很多公共平台创建应用都需要应用签名,比如微信支付宝等,这里提供一个手机获取应用签名的方法
- MyBatis的动态SQL详解
- OC学习笔记之@synthesize
- 交互设计三大法则
- QAtomicInt Memory Ordering
- PAT (Basic Level) Practise (中文)1017. A除以B (20) C语言
- uva 11082 Matrix Decompressing (最大流)