最短路模板[spfa][dijkstra+堆优化][floyd]
借bzoj1624练了一下模板(虽然正解只是floyd)
spfa:
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <iostream>
- #include <vector>
- #include <queue>
- using namespace std;
- const int INF=100001;
- const int maxm=10001,maxn=101;
- int n,m,x,y,w;
- long long ans=0;
- int a[maxm];
- int dist[maxn];
- bool vis[maxn];
- struct edge{
- int to,w;
- edge(int _to,int _w){to=_to;w=_w;}
- };
- vector <edge> g[maxm];
- void spfa(int x){
- queue<int> q;
- memset(dist,63,sizeof(dist));
- memset(vis,false,sizeof(vis));
- dist[x]=0;
- vis[x]=1;
- q.push(x);
- while(!q.empty()){
- int u=q.front();
- q.pop();
- vis[u]=0;
- int l=g[u].size();
- for(int i=0;i<l;i++){
- int v=g[u][i].to;
- if(dist[v]>dist[u]+g[u][i].w){
- dist[v]=dist[u]+g[u][i].w;
- if(!vis[v]){
- vis[v]=1;q.push(v);
- }
- }
- }
- }
- }
- int main(){
- freopen("data.in","r",stdin);
- freopen("text.out","w",stdout);
- //freopen("data.txt","r",stdin);
- scanf("%d%d",&n,&m);
- for(int i=1;i<=m;i++) scanf("%d",&a[i]);
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++){
- scanf("%d",&w);
- if(i!=j) g[i].push_back(edge(j,w));
- }
- for(int i=1;i<m;i++){
- spfa(a[i]);
- ans+=dist[a[i+1]];
- }
- cout<<ans;
- return 0;
- }
dijkstra+priority_queue:
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <iostream>
- #include <vector>
- #include <queue>
- using namespace std;
- const int INF=100001;
- const int maxm=10001,maxn=101;
- int n,m,x,y,w;
- long long ans=0;
- int a[maxm];
- int dist[maxn];
- struct edge{
- int to,w;
- edge(int _to,int _w){to=_to;w=_w;}
- };
- vector <edge> g[maxm];
- typedef pair<int,int> P;
- void dijkstra(int x){
- priority_queue< P , vector <P> , greater<P> > q;
- memset(dist,63,sizeof(dist));
- dist[x]=0;
- q.push(P(0,x));
- while(!q.empty()){
- P u=q.top();
- int x=u.second;
- q.pop();
- if(dist[x]<u.first) continue;
- int l=g[x].size();
- for(int i=0;i<l;i++){
- int v=g[x][i].to;
- if(dist[v]>dist[x]+g[x][i].w){
- dist[v]=dist[x]+g[x][i].w;
- q.push(P(dist[v],v));
- }
- }
- }
- }
- int main(){
- freopen("danger.in","r",stdin);
- freopen("danger.out","w",stdout);
- //freopen("data.txt","r",stdin);
- scanf("%d%d",&n,&m);
- for(int i=1;i<=m;i++) scanf("%d",&a[i]);
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++){
- scanf("%d",&w);
- if(i!=j) g[i].push_back(edge(j,w));
- }
- for(int i=1;i<m;i++){
- dijkstra(a[i]);
- ans+=dist[a[i+1]];
- }
- cout<<ans;
- return 0;
- }
floyd:
- #include<cstdio>
- #include<iostream>
- #include<algorithm>
- #include<cmath>
- #include<cstring>
- #include<string>
- #include<queue>
- #include<stack>
- #include<vector>
- using namespace std;
- int n,m,i,j,k,ans,f[102][102],a[10002];
- int main(){
- cin>>n>>m;
- for(i=1;i<=m;i++)scanf("%d",&a[i]);
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- scanf("%d",&f[i][j]);
- for(k=1;k<=n;k++)
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
- for(i=2;i<=m;i++)ans+=f[a[i-1]][a[i]];
- cout<<ans;
- return 0;
- }
最短路模板[spfa][dijkstra+堆优化][floyd]的更多相关文章
- 单源最短路模板_SPFA_Dijkstra(堆优化)_C++
随手一打就是标准的SPFA,默认1号节点为出发点,当然不用 f 判断是否在队里也可以,只是这样更优化一点 void spfa() { int i,x,k; ;i<=n;i++) { d[i]=o ...
- hdu 2544 单源最短路问题 dijkstra+堆优化模板
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路
2834: 回家的路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 62 Solved: 38[Submit][Status][Discuss] D ...
- PAT-1030 Travel Plan (30 分) 最短路最小边权 堆优化dijkstra+DFS
PAT 1030 最短路最小边权 堆优化dijkstra+DFS 1030 Travel Plan (30 分) A traveler's map gives the distances betwee ...
- 深入理解dijkstra+堆优化
深入理解dijkstra+堆优化 其实就这几种代码几种结构,记住了完全就可以举一反三,所以多记多练多优化多思考. Dijkstra 对于一个有向图或无向图,所有边权为正(边用邻接矩阵的形式给出), ...
- dijkstra堆优化(multiset实现->大大减小代码量)
例题: Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣 ...
- POJ 2502 - Subway Dijkstra堆优化试水
做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...
- POJ2387(dijkstra堆优化)
Til the Cows Come Home Bessie is out in the field and wants to get back to the barn to get as much s ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
随机推荐
- 使用C#或javascript将Table里的数据导出到Excel
原文:使用C#或javascript将Table里的数据导出到Excel Demo效果图: 用C#将Table数据导出Excel: 本方法已经将导出excel做成分部视图,引用时只需在视图中使用如下代 ...
- /proc/mtd 各参数的含义 -- linux内核
经/proc虚拟文件系统读取MTD分区表:cat /proc/mtd mtd .name = raspi, .size = 0x00400000 (4M) .erasesize = 0x0001000 ...
- HBase加Solr
HBase加Solr 如何解决分布式系统数据事务一致性问题 (HBase加Solr) 摘要:对于所有的分布式系统,我想事务一致性问题是极其非常重要的问题,因为它直接影响到系统的可用性.本文以下所述所要 ...
- 大数据系列修炼-Scala课程10
今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1. ...
- 第23章 访问者模式(Visitor Pattern)
原文 第23章 访问者模式(Visitor Pattern) 访问者模式 导读:访问者模式是我个人认为所有行为模式中最为复杂的一种模式了,这个模式可能看一遍会看不懂,我也翻了好几个例子,依然不能很好的 ...
- Jquery学习(三)选择
1.Jquery最重要的是选择. 学习要点: 1.简单选择器 2.进阶选择器 3.高级选择器 ①简单选择器. 最简单的也就是最经常使用的,最经常使用的一般也是 ...
- NYoj WAJUEJI which home strong!(简单搜索)
题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1100 这道题,自己初写搜索,给学长气的只打我,Orz....... 搜索的思路要理 ...
- .net设计模式之装饰模式
概述: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 装饰模式的特点: (1) 装饰对象和真实对象有相同的接口.这样 ...
- js 正则练习之语法高亮
原文:js 正则练习之语法高亮 学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解.今天就分析下 次碳酸钴 和 Barret Lee 语法高亮实现. 先 ...
- NSString 常用分类
#pragma mark 清空字符串中的空白字符 - (NSString *)trimString { return [self stringByTrimmingCharactersInSet:[NS ...