spfa算法----最短路
题目链接:https://cn.vjudge.net/contest/66569#problem/A
代码:
vis数组代表是否还有用,首先初始化为0,首先第一个点入队列,标记为1,然后刚入队列的时候,取消标记,如果经过判断之后还有用,就再标记。然后再就是出发点的路径,因为是从起始点开始走,所以从1-》1这个路径的权值就应该初始化为0.然后再就是对取最短路的判断,如果某一路径上找到了权重更短的路径,更改值,然后判断一下是否在队列中,如果没有,入队列,标记一下。
#include<iostream>
#include<string>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
# define maxn 2000+10
# define inf 0x3f3f3f3f
int vis[maxn];
int path[maxn];
int a[maxn][maxn];
vector<pair<int,int > >wakaka[maxn];
queue<int >q;
int spfa(int t1,int t2)
{
memset(vis,0,sizeof(vis));
for(int i=1; i<=maxn; i++)
{
path[i]=inf;
}
q.push( t1);
vis[t1]=1;
path[t1]=0;
while(!q.empty())
{
int top=q.front();
q.pop();
vis[top]=0;
int len=wakaka[top].size();
for(int i=0; i<len; i++)
{
int temp=wakaka[top][i].first;
if(path[temp]>path[top]+wakaka[top][i].second)//这个地方比较的是目的地的已经存过的值和新的路径存过的值。
{
path[temp]=path[top]+wakaka[top][i].second;
if(vis[temp]==0)
{
vis[temp]=1;
q.push(temp);
}
}
}
}
return path[t2];
}
int main()
{
int t,n;
cin>>t>>n;
for(int i=1; i<=t; i++)
{
int u,v,w;
cin>>u>>v>>w;
if(w>a[u][v])
wakaka[u].push_back(make_pair(v,w));
wakaka[v].push_back(make_pair(u,w));
}
int t1=spfa(1,n);
cout<<t1<<endl;
return 0;
}
分割线----------------------------------------------------------------
最近做了点最短路的题,总结一下。
1,一定要注意最短路操作的是有向图还是无向图,虽然样例可能过,但是ac基本是不可能的。
2,注意打上标记数组,虽然对结果不会有太大的影响,如果数据量大起来的话,如果不打标记数组,队列会出现很多已经出现过的操作。
spfa算法----最短路的更多相关文章
- 六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)
Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) ...
- 用scheme语言实现SPFA算法(单源最短路)
最近自己陷入了很长时间的学习和思考之中,突然发现好久没有更新博文了,于是便想更新一篇. 这篇文章是我之前程序设计语言课作业中一段代码,用scheme语言实现单源最段路算法.当时的我,花了一整天时间,学 ...
- 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结
刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...
- 最短路之SPFA算法
部分来自:http://blog.csdn.net/juststeps/article/details/8772755 求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了. ...
- 图论-单源最短路-SPFA算法
有关概念: 最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径 SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径) 约定:图中不存在负权环,用邻接表 ...
- 图论——最短路:Floyd,Dijkstra,Bellman-Ford,SPFA算法及最小环问题
一.Floyd算法 用于计算任意两个节点之间的最短路径. 参考了five20的博客 Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个 ...
- Bellman-ford算法、SPFA算法求解最短路模板
Bellman-ford 算法适用于含有负权边的最短路求解,复杂度是O( VE ),其原理是依次对每条边进行松弛操作,重复这个操作E-1次后则一定得到最短路,如果还能继续松弛,则有负环.这是因为最长的 ...
- [板子]SPFA算法+链式前向星实现最短路及负权最短路
参考:https://blog.csdn.net/xunalove/article/details/70045815 有关SPFA的介绍就掠过了吧,不是很赞同一些博主说是国内某人最先提出来,Bellm ...
- 图论算法(三) 最短路SPFA算法
我可能要退役了…… 退役之前,写一篇和我一样悲惨的算法:SPFA 最短路算法(二)SPFA算法 Part 1:SPFA算法是什么 其实呢,SPFA算法只是在天朝大陆OIers的称呼,它的正统名字叫做: ...
随机推荐
- BZOJ1283 序列(费用流)
不妨看做是先用k个指针指向被选择的前k个元素,然后每次将选中当前第一个元素的指针移到最后,并且需要满足位置变化量>=m.显然这样可以构造出所有的合法方案.那么可以以此建立费用流模型,以一条流量k ...
- Json数组对象取值
1.数据格式 {"data":[{"username":"xxx","avatar":"xxx",& ...
- MT【55】近零点
[Among the natural enemy of mathematics, the most important thing is that how do we konw somethi ...
- 自学Zabbix12.2 Zabbix命令-zabbix_get
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix12.2 Zabbix命令-zabbix_get 1. zabbix_get概念 ...
- 如何同时修改SharePoint帐号和AD帐号的密码 - 批量修改SharePoint Managed Account
cls if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq ...
- DownloadProvider 源码详细分析
DownloadProvider 简介 DownloadProvider 是Android提供的DownloadManager的增强版,亮点是支持断点下载,提供了“开始下载”,“暂停下载”,“重新下载 ...
- CDQZ多校集训记
20171218 DAY0 初相逢 今天的阳光很好,确实好极了.下午开始时,mercer说门外站了一堆人,我看都不用看就知道是衡水的.衡水人,怎么说呢,觉得还是挺不一样的.不知道像凡哥和超哥这种奇异的 ...
- P3507 GRA-The Minima Game
题目大意: 给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大.在这样的情况 ...
- 【LOJ#6279】数列分块3
题目大意:维护 N 个数组成的序列,支持两种操作:区间加.区间查询某个值的前驱(小于该值的最大值,若无前驱,输出-1). 题解1:可以像分块2一样,维护每个块内元素的一个有序序列,每次查询时二分查找即 ...
- SpaceNet 数据集
SpaceNet 数据集 SpaceNet是DigitalGlobe商业卫星公司提供的遥感图像集合,包含一些标记信息可用作机器学习研究. SpaceNet Challenge主页: https://s ...