最短路径spfa
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std; const int inf = 1<<30;
const int L = 200000; struct Edges
{
int x,y,w,next;
} e[L<<2]; int head[L];
int dis[L];
int vis[L];
int cnt[L]; void AddEdge(int x,int y,int w,int k)
{
e[k].x = x,e[k].y = y,e[k].w = w,e[k].next = head[x],head[x] = k;
}
int relax(int u,int v,int c)
{
if(dis[v]>dis[u]+c)
{
dis[v] = dis[u]+c;
return 1;
}
return 0;
} int SPFA(int src)
{
int i;
memset(cnt,0,sizeof(cnt));
dis[src] = 0;
queue<int> Q;
Q.push(src);
vis[src] = 1;
cnt[src]++;
while(!Q.empty())
{
int u,v;
u = Q.front();
Q.pop();
vis[u] = 0;
for(i = head[u]; i!=-1; i=e[i].next)
{
v = e[i].y;
if(relax(u,v,e[i].w)==1 && !vis[v])
{
Q.push(v);
vis[v] = 1;
}
}
}
} int main()
{
int t,n,m;
int i,j;
scanf("%d%d",&n,&m);
memset(e,-1,sizeof(e));
for(i = 1; i<=n; i++)
{
dis[i] = inf;
vis[i] = 0;
head[i] = -1;
}
for(i = 0; i<m; i++)
{
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
AddEdge(x,y,w,i);
}
SPFA(1);
for(i = 2; i<=n; i++)
printf("%d\n",dis[i]); return 0;
} #include<iostream>
#include<queue>
#include<memory.h>
using namespace std; const int inf=1<<30;
const int N=200005;
struct Edge
{
int u,v,w,next;
};
int head[N];
int dis[N];
int vis[N];
Edge e[N]; void addEdge(int from,int to,int we,int i)
{
e[i].u=from;
e[i].v=to;
e[i].w=we;
e[i].next=head[from];
head[from]=i;
} bool releax(int u,int v,int w)
{
if(dis[u]+w<dis[v])
{
dis[v]=dis[u]+w;
return true;
}
return false;
} void spfa(int x)
{
queue<int> q;
q.push(x);
vis[x]=1;
dis[x]=0;
while(!q.empty())
{
int u,v,i;
u=q.front();
q.pop();
vis[u]=0;
for(i=head[u];i!=-1;i=e[i].next)
{
v=e[i].v;
if(!vis[v]&&releax(u,v,e[i].w))
{
q.push(v);
vis[v]=1;
}
}
} } int main()
{
//cout<<inf<<' '<<N<<endl;
int n,m,i,u,v,w;
//memset(head,-1,sizeof(head));
//memset(dis,inf,sizeof(dis));
//memset(vis,0,sizeof(vis));
//memset(e,-1,sizeof(e));
cin>>n>>m;
for(i=1;i<=n;i++)
{
head[i]=-1;
dis[i]=inf;
vis[i]=0;
}
for(i=1;i<=m;i++)
{
cin>>u>>v>>w;
addEdge(u,v,w,i);
} /*for(i=1;i<=m;i++)
{
cout<<e[i].u<<' '<<e[i].v<<' '<<e[i].next<<endl;
}
for(i=1;i<=3;i++)
cout<<head[i]<<' ';*/
spfa(1);
for(i=2;i<=n;i++)
{
cout<<dis[i]<<endl;
} return 0;
}
最短路径spfa的更多相关文章
- [最短路径SPFA] POJ 1847 Tram
Tram Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14630 Accepted: 5397 Description Tra ...
- 最短路径--SPFA 算法
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了. 我们约定有向加权图G不存在负权回路,即最短路径一 ...
- 最短路径 SPFA P3371 【模板】单源最短路径(弱化版)
P3371 [模板]单源最短路径(弱化版) SPFA算法: SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA 最坏情况下复 ...
- 最短路径——SPFA算法
一.前提引入 我们学过了Bellman-Ford算法,现在又要提出这个SPFA算法,为什么呢? 考虑一个随机图(点和边随机生成),除了已确定最短路的顶点与尚未确定最短路的顶点之间的边,其它的边所做的都 ...
- 图的最短路径-----------SPFA算法详解(TjuOj2831_Wormholes)
这次整理了一下SPFA算法,首先相比Dijkstra算法,SPFA可以处理带有负权变的图.(个人认为原因是SPFA在进行松弛操作时可以对某一条边重复进行松弛,如果存在负权边,在多次松弛某边时可以更新该 ...
- luogu P3371 & P4779 单源最短路径spfa & 最大堆优化Dijkstra算法
P3371 [模板]单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出 ...
- 最短路径----SPFA算法
求最短路径的算法有许多种,除了排序外,恐怕是ACM界中解决同一类问题算法最多的了.最熟悉的无疑是Dijkstra,接着是Bellman-Ford,它们都可以求出由一个源点向其他各点的最短路径:如果我们 ...
- LD1-B(最短路径-SPFA)
题目链接 /* *题目大意: *给定v个点的重量,并给定e条边,每条边具有一个权值; *在e条边中选v-1条边使这v个点成为一棵树; *定义这棵树的代价为(每棵子树节点重量和其子树根到父节点的边的权值 ...
- 枚举最短路径+SPFA
Harry Potter and the Final Battle Submit Status Description The final battle is coming. Now Harry Po ...
- 【SPFA与Dijkstra的对比】CDOJ 1961 咸鱼睡觉觉【差分约束-负权最短路径SPFA】
差分约束系统,求最小值,跑最长路. 转自:https://www.cnblogs.com/ehanla/p/9134012.html 题解:设sum[x]为前x个咕咕中至少需要赶走的咕咕数,则sum[ ...
随机推荐
- go微服务框架go-micro深度学习(三) Registry服务的注册和发现
服务的注册与发现是微服务必不可少的功能,这样系统才能有更高的性能,更高的可用性.go-micro框架的服务发现有自己能用的接口Registry.只要实现这个接口就可以定制自己的服务注册和发现. go- ...
- SQL SERVER 中日期格式化,及GETDATE()、CONVERT()函数使用说明
1. date和datetime类型的区别 date是SQL Server 2008新引进的数据类型.它表示一个日期,不包含时间部分,可以表示的日期范围从公元元年1月1日到9999年12月31日.只需 ...
- 洛谷 P1739 表达式括号匹配
题目链接https://www.luogu.org/problemnew/show/P1739 题目描述 假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为 ...
- Windows平台下nginx跨域配置
1)下载地址: http://nginx.org 2)启动 解压至d:\nginx,运行nginx.exe(即nginx -c conf\nginx.conf),默认使用80端口,日志见文件夹D:\n ...
- iOS开发之Found a swap file by the name ".podfile.swp" owned by: Netban dated:...file name: ~N...
Found a swap file by the name ".podfile.swp" owned by: Netban dated: Fri Mar 24 13:57:27 2 ...
- Python AES_ECB_PKCS5加密代码
https://blog.csdn.net/u010978840/article/details/79035463 ****************************************** ...
- C#字符串、字节数组和内存流间的相互转换
定义string变量为str,内存流变量为ms,比特数组为bt 1.字符串=>比特数组 (1)byte[] bt=System.Text.Encoding.Default.GetBytes(&q ...
- spring boot 项目启动无任何反应
遇到的问题 spring boot项目启动后无任何报错,ps有进程,nohub无日志 定位 更换jar包,问题依然存在,将jar包放到其他服务器,运行正常,排除打包问题 同服务器其他系统运行正常,但停 ...
- mysql的大量的sleep进程解决办法
mysql的大量的sleep进程解决办法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/liuyong0507/article/detai ...
- 新内容转入github
所有新内容已经转入 https://github.com/honggzb/Study-General https://github.com/honggzb/Study2016