最短路--Dijkstra&&Floyed&&SPFA
最短路径是一个很常见的问题,这里有3种方法,可供参考。
一.Dijkstra
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int a[][];
double c[];
bool b[];
double f[][];
int n,i,j,k,x,y,m,s,e;
double minl;
double maxx = 1e30;
int main()
{
cin >> n;
for (i = ; i <= n; i++)
cin >> a[i][] >> a[i][];
for (i = ; i <= n; i++)
for(j = ; j <= n; j++)
f[i][j] = maxx;
cin >> m;
for (i = ; i <= m; i++)
{
cin >> x >> y;
f[x][y] = f[y][x] = sqrt(pow(double(a[x][]-a[y][]),)+pow(double(a[x][]-a[y][]),));
}
cin>>s>>e;
for(int i = ;i <= n;i++)
{
c[i] = f[s][i];
}
memset(b,false,sizeof(b));
b[s] = true;
c[s] = ;
for(int i = ;i <= n;i++)
{
minl = maxx;
k = ;
for(int j = ;j <= n;j++)
{
if(b[j] == false && c[j] < minl)//没走过的路程最小的点
{
minl = c[j];
k = j;
}
}
if(k == )
break;
b[k] = true;
for(int j = ;j <= n;j++) //将所以能变的点最小路程全变了
{
if(c[k] + f[k][j] < c[j])
c[j] = c[k] + f[k][j];
}
}
printf("%.2lf",c[e]);
return ;
}
二.Floyed
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
double f[][];
int a[][];
int m,n,x,y,r,s,e;
int main()
{
memset(f,,sizeof(f));
cin>>n;
for(int i = ;i <= n;i++)
{
cin>>a[i][]>>a[i][];
}
cin>>m;
for(int i = ;i <= m;i++)
{
cin>>x>>y;
f[y][x] = f[x][y] = sqrt(pow(double(a[x][]-a[y][]),)+pow(double(a[x][]-a[y][]),));
}
cin>>s>>e;
for(int k = ;k <= n;k++)
{
for(int i = ;i <= n;i++)
{
for(int j = ;j <= n;j++)
{
if(f[i][j] > f[i][k] + f[k][j] && i != j && i != k && j != k)
f[i][j] = f[i][k] + f[k][j];
}
}
}
printf("%.2lf",f[s][e]);
return ;
}
/*
5
0 0
2 0
2 2
0 2
3 1
5
1 2
1 3
1 4
2 5
3 5
1 5
*/
三.SPFA
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int n,p,c,i,j,x,y,t,min1,head,tail,tot,u;
int a[][],b[],dis[],num[],w[][];
queue <int> team;
bool exist[];
int main()
{
cin>>n>>p>>c;
for(i=;i<=p;i++)
{
b[i]=;
num[i]=;
for(j=;j<=p;j++)
w[i][j]=0x7fffffff/;
}
for(i = ;i <= n;i++)
cin>>b[i];
for(i=;i<=c;i++) //邻接矩阵存储
{
cin>>x>>y>>t;
w[x][y] = t;
a[x][++num[x]] = y;
a[y][++num[y]] = x;
w[y][x] = w[x][y];
}
min1=0x7fffffff/;
for(i=;i<=p;i++)
{
for(j=;j<=p;j++) dis[j]=0x7fffffff/; //队列数组初始化
memset(exist,false,sizeof(exist)); //exist标志初始化
dis[i]=;
exist[i]=true;
team.push(i);
while(!team.empty())
{
u = team.front();
team.pop();
exist[u] = true;
for(int j = ;j <= num[u];j++)
{
if(dis[a[u][j]] > dis[u] + w[u][a[u][j]])
{
dis[a[u][j]] = dis[u] + w[u][a[u][j]];
if(!exist[a[u][j]])
{
team.push(a[u][j]);
a[u][j] = true;
}
}
}
}
tot=;
for(j=;j<=n;j++)
tot+=dis[b[j]];
if (tot<min1) min1=tot;
}
cout<<min1;
return ;
}
最短路--Dijkstra&&Floyed&&SPFA的更多相关文章
- hdu1874 畅通project续 最短路 floyd或dijkstra或spfa
Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择.而某些方案 ...
- UESTC - 1987 童心未泯的帆宝和乐爷 (第k短路 A*算法+SPFA算法 模板)
传送门: http://www.qscoj.cn/#/problem/show/1987 童心未泯的帆宝和乐爷 Edit Time Limit: 10000 MS Memory Limit: ...
- Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化)
Til the Cows Come Home 最短路Dijkstra+bellman(普通+优化) 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回 ...
- hdu 2544 最短路 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间, ...
- 算法学习笔记(三) 最短路 Dijkstra 和 Floyd 算法
图论中一个经典问题就是求最短路.最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划.这也是算法中的两大经典代表.用一个简单图在纸上一步一步演算,也是 ...
- 单源最短路dijkstra算法&&优化史
一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...
- HUD.2544 最短路 (Dijkstra)
HUD.2544 最短路 (Dijkstra) 题意分析 1表示起点,n表示起点(或者颠倒过来也可以) 建立无向图 从n或者1跑dij即可. 代码总览 #include <bits/stdc++ ...
- 训练指南 UVALive - 4080(最短路Dijkstra + 边修改 + 最短路树)
layout: post title: 训练指南 UVALive - 4080(最短路Dijkstra + 边修改 + 最短路树) author: "luowentaoaa" ca ...
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
随机推荐
- html5——动画
基本介绍 /*执行函数gun,执行时间,重复执行,反向执行,匀速执行,延迟执行时间*/ animation: gun 4s infinite alternate linear 5s; 动画序列 1.g ...
- html——细线表格
细线: 1.table表格设置背景色 2.table中设置单元格距离 3.tr标签设置另外一种背景色 <!DOCTYPE html> <html> <head lang= ...
- vim之补全2(完全个人定制版)
关于补全的方面要说的的确很多, 这里选择分为两个章叙述. 如果你想学vim, 你需要有很强的耐心, 如果你想锻炼这种耐心, 你可以试着先看完我之前的文章. 好了, 下面继续我们的vim补全吧. vim ...
- Stanford coursera Andrew Ng 机器学习课程第二周总结(附Exercise 1)
Exercise 1:Linear Regression---实现一个线性回归 重要公式 1.h(θ)函数 2.J(θ)函数 思考一下,在matlab里面怎么表达?如下: 原理如下:(如果你懂了这道作 ...
- mysql高可用架构mha之master_ip_failover脚本
脚本如下: #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my ...
- 【转】jmeter定时调度,持续并发,使用简介
一.安装Jmeter 1.下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 目前最新版为2.9,其余文件如源代码等也可从如下官网下载 ...
- Python 模块的导入 day5
一.模块 1.标准模块 python自带的 2.第三方模块 需要自己安装的模块 3.自己写的python文件 一个python文件,就是一个模块 (1)导入模块的实质 就是把你导入的模块运行了一遍 ( ...
- Scala 技术笔记之 Option Some None
避免null使用 大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是“无”,在Java,它是null.在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的.但 ...
- Scrapy实战:使用IDE工具运行爬虫
一般我们运行爬虫程序都是使用命令行,比如:scrapy crwal sobook.不过这多少有些不方便,可以使用下面的方法使用IDE的方式运行爬虫 我这边使用的是pycharm软件,在pycharm里 ...
- 我理解的数据结构(一)—— 数组(Array)
我理解的数据结构(一)-- 数组(Array) 首先,我是一个phper,但是毕竟php是一个脚本语言,如果使用脚本语言去理解数据结构具有一定的局限性.因为脚本语言是不需要编译的,如果你的语法写的不错 ...