最短路

Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 82   Accepted Submission(s) : 51
Problem Description
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

 
Input
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。输入保证至少存在1条商店到赛场的路线。
 
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
 
Sample Input
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
 
Sample Output
3 2
dijskra代码:
 #include<stdio.h>
#include<string.h>
const int INF=0x3f3f3f3f;
const int MAXN=;
#define MIN(x,y) (x<y?x:y)
int map[MAXN][MAXN];
int vis[MAXN],d[MAXN];
int N;
void initial(){
memset(d,INF,sizeof(d));
memset(vis,,sizeof(vis));
memset(map,INF,sizeof(map));
}
void dijkscra(int s){
int k;
d[s]=;
while(true){
k=-;
for(int i=;i<=N;i++)
if(!vis[i]&&(k==-||d[i]<d[k]))k=i;
if(k==-)break;
vis[k]=;
for(int i=;i<=N;i++){
d[i]=MIN(d[i],d[k]+map[k][i]);
}
}
}
int main(){
int M;
int a,b,c;
while(~scanf("%d%d",&N,&M),N||M){
initial();
while(M--){
scanf("%d%d%d",&a,&b,&c);
if(c<map[a][b]){
map[a][b]=map[b][a]=c;
}
}
dijkscra();
printf("%d\n",d[N]);
}
return ;
}

SPFA算法:

 #include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=;
const int MAXM=;
int top,vis[MAXN],dis[MAXN],head[MAXM];
int N,M;
queue<int>dl;
struct Edge{
int from,to,value,next;
};
Edge edg[MAXM];
void initial(){
top=;
memset(vis,,sizeof(vis));
memset(dis,INF,sizeof(dis));
memset(head,-,sizeof(head));
while(!dl.empty())dl.pop();
}
void add(int u,int v,int value){
Edge E={u,v,value,head[u]};
edg[top]=E;
head[u]=top++;
}
void SPFA(int sx){
dl.push(sx);
dis[sx]=;
vis[sx]=;
while(!dl.empty()){
int u=dl.front();
dl.pop();
vis[u]=;
for(int i=head[u];i!=-;i=edg[i].next){
int v=edg[i].to;
if(dis[u]+edg[i].value<dis[v]){
dis[v]=dis[u]+edg[i].value;
if(!vis[v]){
vis[v]=;
dl.push(v);
}
}
}
}
printf("%d\n",dis[N]);
}
int main(){
int a,b,c;
while(~scanf("%d%d",&N,&M),N|M){
initial();
while(M--){
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
}
SPFA();
}
return ;
}

Bellman:

 #include<stdio.h>
#include<string.h>
#define MIN(x,y)(x<y?x:y)
#define mem(a,b) memset(a,b,sizeof(a))
const int INF=0x3f3f3f3f;
const int MAXN=;
const int MAXM=<<;
struct Node{
int u,v,w;
};
Node dt[MAXM];
int dis[MAXN];
int top,N;
void add(int u,int v,int w){
dt[top].u=u;
dt[top].v=v;
dt[top++].w=w;
}
void Bellman(int sx){
mem(dis,INF);
dis[sx]=;
for(int j=;j<=N;j++)
for(int i=;i<top;i++){
int u=dt[i].u,v=dt[i].v,w=dt[i].w;
dis[v]=MIN(dis[v],dis[u]+w);
}
}
int main(){
int M;
while(~scanf("%d%d",&N,&M),N||M){
int a,b,c;
top=;
while(M--){
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
}
Bellman();
printf("%d\n",dis[N]);
}
return ;
}

最短路(dijskra+SPFA+Bellman)的更多相关文章

  1. 一个人的旅行(floyd+dijskra+SPFA+Bellman)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  2. 模板C++ 03图论算法 1最短路之单源最短路(SPFA)

    3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...

  3. Wormholes(SPFA+Bellman)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36860   Accepted: 13505 Descr ...

  4. ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)

    这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...

  5. POJ 2449Remmarguts' Date K短路模板 SPFA+A*

    K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...

  6. ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  7. BZOJ_1614_ [Usaco2007_Jan]_Telephone_Lines_架设电话线_(二分+最短路_Dijkstra/Spfa)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1614 分析 类似POJ_3662_Telephone_Lines_(二分+最短路) Dijks ...

  8. 六度分离(floyd算法+dijskra+SPFA)

    六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. 畅通工程续(dijskra+SPFA)

    畅通工程续 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

随机推荐

  1. 推荐使用Tiny Framework web开发UI组件

    TINY FRAMEWORK 基于组件化的J2EE开发框架,from:http://www.tinygroup.org/   名字 Tiny名称的来历 取名Tiny是取其微不足道,微小之意. Tiny ...

  2. poj 1157 LITTLE SHOP_简单dp

    题意:给你n种花,m个盆,花盆是有顺序的,每种花只能插一个花盘i,下一种花的只能插i<j的花盘,现在给出价值,求最大价值 简单dp #include <iostream> #incl ...

  3. python模块目录文件后续

    1,新增PythonModule加载path Ruiy tip(关于python list[]数据库类型特殊你懂的!append(""),extend([""] ...

  4. Python with ASP

    Python with ASP Python with ASP

  5. UVA10869 - Brownie Points II(线段树)

    UVA10869 - Brownie Points II(线段树) 题目链接 题目大意:平面上有n个点,Stan和Ollie在玩游戏,游戏规则是:Stan先画一条竖直的线作为y轴,条件是必需要经过这个 ...

  6. Windows 应用程序结构

    Windows 应用程序结构

  7. Swift的初始化方法

    我们在深入初始化方法之前,不妨先再想想Swift中的初始化想要达到一种怎样的目的. 其实就是安全.在Objective-C中,init方法是非常不安全的:没有人能保证init只被调用一次,也没有人保证 ...

  8. 从linux telnet到exchange邮件server来測试发送邮件

    我们在Linux下,能够通过telnet邮件server的25port(一般smtp邮件server都是这个),来測试是否能发送邮件. 前提是先得把DNS配好,或者/etc/hosts文件制定好邮件s ...

  9. Angular初级入门

    1:jquery :库 -一般是封装了一些方法 -我们去调用他的这些方法分 2:angular:框架 -框架是提供了一些规则或者模式 -我们是根据这一种规则或者模式去写代码 -然后接下来就由angul ...

  10. Knime 使用 初探

    使用数据挖掘工具 Knime,分析某公司用户使用情况. 首先,打开csv文件数据,看到有以下门类: 时间.track id 歌曲名.用户行为.用户id.日期.snap_id 即歌曲门类 然后,打开Kn ...