最短路

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. Struts2 请求处理步骤

    1) 客户端初始化一个指向Servlet容器(例如Tomcat)的请求   2 )这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器 ...

  2. 几种MEMS陀螺仪(gyroscope)的设计和性能比较

    现在市场上的MEMS陀螺仪主要有SYSTRON.BOSCH和INVENSENSE设计和生产.前两者设计的陀螺仪属高端产品,主要用于汽车.后者的属低端产品,主要用于消费类电子,象任天堂的Wii.ADI2 ...

  3. ISSkin 使用技巧,WinXP 下的窗口阴影

    原文 http://restools.hanzify.org/article.asp?id=109 是否觉得在使用 ISSkin 的时候感觉窗口太过平板,尤其对于那些窗口边缘和窗口内部颜色一致的皮肤尤 ...

  4. Servlet中Web.xml的配置详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用 ...

  5. Repeated meta-data items

    B.2 Generating your own meta-data using the annotation processor You can easily generate your own co ...

  6. JIRA官方:JIRA报表与分析

    访问重要的问题 JIRA系统内置的过滤器可以使你快速访问最重要的问题.通过保存和收藏自定义的过滤器,你可以随时了解项目和团队的优先级. 保持团队同步 创建一个过滤器,可以保存你的任何搜索条件.通过分享 ...

  7. uva 10245 The Closest Pair Problem_枚举

    题意:求任意两点之间的距离的最少一个距离 思路:枚举一下就可以了 #include <iostream> #include<cstdio> #include<cmath& ...

  8. UVa 1583 Digit Generator(数学)

     题意 假设a加上a全部数位上的数等于b时 a称为b的generator  求给定数的最小generator 给的数n是小于100,000的  考虑到全部数位和最大的数99,999的数位和也才45 ...

  9. AS3: Socket 数据包 收 发

    AS3.0中使用Socket使用tcp服务器协议,它是一种流协议,不停的将分片传输给客户端,P作为流,发包是不会整包到达的,而是源源不断的. 它不同于UDP服务器协议,UDP作为数据包协议,整包到达. ...

  10. base64图片在各种浏览器的兼容性处理

    IE浏览器目前最高的版本是v11,而微软放弃了IE,转向新的浏览器开发,并取名为Edge.base64图片在IE9及以后的图片均能显示没有问题,而Firefox, Chrome, Safari等非IE ...