最短路(dijskra+SPFA+Bellman)
最短路
Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 82 Accepted Submission(s) : 51
#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)的更多相关文章
- 一个人的旅行(floyd+dijskra+SPFA+Bellman)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 模板C++ 03图论算法 1最短路之单源最短路(SPFA)
3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...
- Wormholes(SPFA+Bellman)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36860 Accepted: 13505 Descr ...
- ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)
这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...
- POJ 2449Remmarguts' Date K短路模板 SPFA+A*
K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...
- ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- BZOJ_1614_ [Usaco2007_Jan]_Telephone_Lines_架设电话线_(二分+最短路_Dijkstra/Spfa)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1614 分析 类似POJ_3662_Telephone_Lines_(二分+最短路) Dijks ...
- 六度分离(floyd算法+dijskra+SPFA)
六度分离 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 畅通工程续(dijskra+SPFA)
畅通工程续 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submiss ...
随机推荐
- Delphi调用安装驱动sys的单元
unit SysDriver; interface uses windows, winsvc; // jwawinsvc; Type TSysDriver = class(TObject) priva ...
- 在 Inno Setup 中实现倒数N秒后激活按钮
原文 http://restools.hanzify.org/article.asp?id=67 timectrl.dll 为一个 6.5 KB 的按钮激活时间控制插件. 引用来自 Example1 ...
- 【LeetCode练习题】Next Permutation
Next Permutation Implement next permutation, which rearranges numbers into the lexicographically nex ...
- nyoj 325 zb的生日(dfs)
描述今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb ...
- Ice_cream’s world III(prime)
Ice_cream’s world III Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Othe ...
- 【迪杰斯特拉双关键字最短路】【HDU3790】【最短路径问题】
题目大意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. 只需要再更新的时候判断一下就好 voi ...
- css3 transiton
div { width:100px; height:100px; background:yellow; transition-property:width; transition-duration:1 ...
- DBubtil的使用
1.什么是O-R Mapping(对象-关系映射) 常用O-R Mapping映射工具 Hibernate(全自动框架) Ibatis(半自动框架/SQL) Commons DbUti ls(只是对J ...
- dialog获取焦点
弹出层是一个iframe openWindow:function (options) { var url = options.url; url += url.indexOf("?" ...
- Android ListView滑动底部自动加载更多
直接上代码: // lv = (ListView) findViewById(R.id.lv); // // for(int i = 0;i < 50;i++){ // ls.add(" ...