【SinGuLaRiTy-1002】 Copyright (c) SinGuLaRiTy 2017. All Rights Reserved.

Dijkstra:

题目描述

有向图的单源点最短路问题(Dijkstra算法)

输入

第1行:2个空格分开的整数n(2<=n<=500)和m(10<=m<=20000),分别表示图的顶点数和边数。

第2..m+1行:每行3个空格分开的整数i,j, w。i表示一条边的起点,j表示终点, w表示权值。

第m+2行:2个整数s,t(1<=s,t<=n),表示指定的顶点。

输出

第1行:最小距离

第2行:最短路径(从起点到终点的序列,用1个空格分开)

样例输入 样例输出

5 7

1 2 10

1 4 30

1 5 100

2 3 50

3 5 10

4 3 20

4 5 60

1 5

60

1 4 3 5

代码:

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m;
int G[][],dis[],L[];
bool used[];
void Dijkstra(int s)
{
for(int i=;i<=n;i++)
{
used[s]=;
for(int j=;j<=n;j++)
{
if(G[s][j]==||s==j)
continue;
if(dis[j]>dis[s]+G[s][j])
dis[j]=dis[s]+G[s][j],L[j]=s;
}
int themin=0x3f3f3f3f;
for(int i=;i<=n;i++)
if(used[i]==&&dis[i]<themin)
s=i,themin=dis[i];
}
}
int main()
{
int a,b,c,S,E,cnt=;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
G[a][b]=c;
}
scanf("%d%d",&S,&E);
int e=E;
dis[S]=;
for(int i=;i<=n;i++)
if(i!=S) dis[i]=0x3f3f3f3f; Dijkstra(S); printf("%d\n",dis[E]);
while(L[E]!=)
{
dis[cnt++]=L[E];
E=L[E];
}
for(int i=cnt-;i>=;i--)
printf("%d ",dis[i]);
printf("%d",e);
return ;
}

SPAF:

题目描述

有向图的单源点最短路径问题。源点编号为1,终点编号为n。

输入

第1行:2个空格分开的整数n(2<=n<=5000)和m(10<=m<=500000),分别表示图的顶点数和边数。

第2..m+1行:每行3个空格分开的整数i,j, w。i表示一条边的起点,j表示终点, w表示权值。

输出

第1行:1个整数,表示最小距离

样例输入1 样例输出1
4 7
1 2 68
1 3 19
1 4 66
2 3 23
3 4 65
3 2 57
4 1 68
66

样例输入

样例输出
3 3
1 2 -7
2 3 4
3 1 2
No Solution

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct node{
int v,w,next;
}edge[];
int cnt,head[],n,m,dis[],tot[];
bool inq[];
void addedge(int u,int v,int w)
{
edge[cnt].v=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt++;
}
bool SPFA()
{
memset(dis,0x3f,sizeof dis);
dis[]=;
inq[]=;
deque<int>q;
q.push_front();
while(!q.empty())
{
int u=q.front();
q.pop_front();
inq[u]=;
for(int i=head[u];i!=-;i=edge[i].next)
{
int v=edge[i].v,w=edge[i].w;
if(dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
if(!inq[v])
{
if(dis[v]<dis[u])q.push_front(v);
else q.push_back(v);
inq[v]=;
if(++tot[v]>n)return ;
}
}
}
}
return ;
}
int main()
{
int u,v,w;
scanf("%d%d",&n,&m);
memset(head,-,sizeof head);
for(int i=;i<=m;++i)
{
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
}
SPFA()?printf("%d\n",dis[n]):
puts("No Solution");
}

Floyd:

代码:

#include<cstdio>
#include<cstring>
#define maxn 100
#define INF -1
int map[maxn][maxn];
int n, m, path[maxn][maxn]; void Floyd(int n)
{
int i, j, k;
for(k = ; k < n; ++k)
for(i = ; i < n; ++i)
for(j = ; j < n; ++j)
if(map[i][k] != INF && map[k][j] != INF && (map[i][k] + map[k][j] < map[i][j] || map[i][j] == INF)){
map[i][j] = map[i][k] + map[k][j];
path[i][j] = k;
}
} void getPath(int v, int u)
{
int k = path[v][u];
if(k == INF){
printf("%d===>", v);
return;
}
getPath(v, k);
getPath(k, u);
} int main()
{
scanf("%d%d", &n, &m);
memset(map, INF, sizeof(map));
memset(path, INF, sizeof(path));
int i, j, a, b, c;
for(i = ; i < n; ++i) map[i][i] = ;
for(i = ; i < m; ++i){
scanf("%d%d%d", &a, &b, &c);
map[a][b] = c;
}
Floyd(n);
for(i = ; i < n; ++i)
for(j = ; j < n; ++j)
if(map[i][j] != INF){
printf("%d->%d:%d\n the path is:", i, j, map[i][j]);
getPath(i, j);
printf("%d\n", j);
}
return ;
}

BellmanFord:

题目描述

有向图负权的单源点最短路问题(BellmanFord 算法),如果最短路径有多条,输出路径经过边数较小的解; 如果最短路径边数相同,输出编号较小的序列.

输入

第1行:2个空格分开的整数n(2<=n<=500)和m(10<=m<=20000),分别表示图的顶点数和边数。

第2..m+1行:每行3个空格分开的整数i,j, w。i表示一条边的起点,j表示终点, w表示权值。

第m+2行:2个整数s,t(1<=s,t<=n),表示指定的顶点。

输出

第1行:最小距离

第2行:最短路径(从起点到终点的序列,用1个空格分开)

如果出现负权回路,输出:No Solution

样例输入 样例输出
6 7
1 2 2
1 3 -1
2 4 -3
3 4 3
3 6 7
4 6 -2
3 5 6
1 6
-3
1 2 4 6

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int f[][],dis[],s[];
void print(int x)
{
if(s[x]==) return;
print(s[x]);
printf(" %d",x);
}
int main()
{
int n,m,i,j,q,z;
scanf("%d%d",&n,&m);
for(i=;i<=m;i++)
scanf("%d%d%d",&f[i][],&f[i][],&f[i][]);
scanf("%d%d",&q,&z);
memset(dis,,sizeof(dis));
dis[q]=;
for(i=;i<=n;i++){
for(j=;j<=m;j++){
if(dis[f[j][]]+f[j][]<dis[f[j][]]&&i<n){
dis[f[j][]]=dis[f[j][]]+f[j][];
s[f[j][]]=f[j][];
}
if(i==n&&dis[f[j][]]+f[j][]<dis[f[j][]]){
printf("No Solution");
return ;
}
}
}
printf("%d\n",dis[z]);
printf("%d",q);
print(z);
}

Time:2017-02-03

[SinGuLaRiTy] 最短路计算代码库的更多相关文章

  1. Overview of the Oppia codebase(Oppia代码库总览)

    Oppia is built with Google App Engine. Its backend is written in Python, and its frontend is written ...

  2. Python中的短路计算

    在Python中,布尔类型还可以与其他数据类型做 and.or和not运算,请看下面的代码: In [1]: a = True In [2]: print(a and 'a=T' or 'a=F') ...

  3. 如何统计TFS代码库中的团队项目所占用的磁盘空间

    在一个开发团队较多的研发中心,当开发人员的代码数据积累到一定程度,TFS系统的磁盘空间的使用率会逐渐成为系统管理员关注的问题.你可能会关注代码库中每个团队项目,甚至每个目录占用的的磁盘空间.不幸的,即 ...

  4. minizip -基于zlib开源代码库

    转载:https://www.topomel.com/archives/979.html 一.minizip 是一套用来压缩和解压文件的工具,其基于zlib开源代码库. 开源代码下载链接:http:/ ...

  5. python之短路计算-布尔类型

    Python中布尔类型 我们已经了解了Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 Tr ...

  6. [java代码库]-简易计算器(第二种)

    [java代码库]-简易计算器(第二种) 第二种方案:在程序中不使用if/switch……case等语句,完成计算器功能. <html> <head> <title> ...

  7. python学习--大数据与科学计算第三方库简介

    大数据与科学计算  库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...

  8. python 科学计算基础库安装

    1.numpyNumPy(Numeric Python)是用Python进行科学计算的基本软件包. NumPy是Python编程语言的扩展,增加了对大型多维数组和矩阵的支持,以及一个大型的高级数学函数 ...

  9. iOS流行的开源代码库

    本文介绍一些流行的iOS的开源代码库 1.AFNetworking 更新频率高的轻量级的第三方网络库,基于NSURL和NSOperation,支持iOS和OSX.https://github.com/ ...

随机推荐

  1. apache的用户认证

    1. 限制用户访问的方式: 1. 限制访问服务的客户端主机 2. 需要用户名和密码 2. 行为用户验证需要两步: 1. 创建一个包含用户名和密码的文件 2. 服务器上的哪些资源需要保护,哪些用户可以进 ...

  2. css中书写小三角

    我们在开发过程中,有很多的方向标签不是图片,而是用css方法书写上去的. 首先我们要了解原理,border的边框的脚步是45度角. 向左方向: width:0px: height:0px: borde ...

  3. 在VMware Workstation 9中安装Mac OS X 10.8 Mountain Lion

    本文环境: CPU:Intel Core i7 920: OS:Windows 7: 内存:8G: 玩Hackintosh各有各的理由,不管什么理由,利用虚拟机安装Mac OS X都是一个可行的办法. ...

  4. shell-2

    环境变量配置文件: cd ~  直接回到根目录 位置变量:$0 代表当前执行的文件名$1-$9 代表输入的参数分别一次${10} 注意:双引号和单引号双引号是弱引用,会解析里面的特殊字符所代表的含义单 ...

  5. barmanager工具栏及gridcontrol部分属性设置

    1.工具栏部分属性设置,如:右键菜单,禁止移动等   2.gridControl属性设置,如选中行颜色,禁止移动隐藏等      

  6. React Native与原生项目连接与发布

    前面的各种环境配置按照官方文档一步一步来,挺详细,宝宝在这里就不多说废话了. 其次,前面的配置,我参照的这个博主的文章React Native 集成到iOS原生项目 下面是宝宝掉过的坑(半径15M): ...

  7. EFcore与动态模型(二)

    上篇文章中介绍了如何使用ef进行动态类型的管理,比如我们定义了ShopDbContext并且注册了动态模型信息,下面的代码实现了动态信息的增加: Type modelType = IRuntimeMo ...

  8. [前言] 实现一个Android电子书阅读APP

    大家好,我是小方,我将在接下来的几篇文章中从零实现一个网络小说阅读器,从安卓编程最基础的部分讲起,直至成功完成我们的应用,从新建一个项目开始,不断添加新的代码,添加新的界面,循序渐进,涵盖所有我们需要 ...

  9. HTML5培训哪里靠谱

    兄弟连IT培训教育,是学科最全的IT培训机构,涵盖HTML5培训.等学科,并是业内推出真实千万级服务器架构课程的唯一培训学校.兄弟连已分别在北京.上海.广州.沈阳.郑州.济南.成都.杭州.南京.南宁. ...

  10. 寻找与疾病相关的SNP位点——R语言从SNPedia批量提取搜索数据

    是单核苷酸多态性,人的基因是相似的,有些位点上存在差异,这种某个位点的核苷酸差异就做单核苷酸多态性,它影响着生物的性状,影响着对某些疾病的易感性.SNPedia是一个SNP调査百科,它引用各种已经发布 ...