【题目描述】

给出一个有向图G=(V, E),和一个源点v0∈V,请写一个程序输出v0和图G中其它顶点的最短路径。只要所有的有向环权值和都是正的,我们就允许图的边有负值。顶点的标号从1到n(n为图G的顶点数)。

【输入】

第1行:一个正数n(2≤n≤80),表示图G的顶点总数。

第2行:一个整数,表示源点v0(v0∈V,v0可以是图G中任意一个顶点)。

第3至第n+2行,用一个邻接矩阵W给出了这个图。

【输出】

共包含n-1行,按照顶点编号从小到大的顺序,每行输出源点v0到一个顶点的最短距离。每行的具体格式参照样例。

【输入样例】

5
1
0 2 - - 10
- 0 3 - 7
- - 0 4 -
- - - 0 5
- - 6 - 0

【输出样例】

(1 -> 2) = 2
(1 -> 3) = 5
(1 -> 4) = 9
(1 -> 5) = 9

【提示】

样例所对应的图如下:

嗯~一个简单的Floyed应用题,正好练练手

Floyd算法

1.定义概览

Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。

2.算法描述

算法思想原理:

Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在)

从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。

我们可以开一个n*n的邻接矩阵,记录联通情况:f[i][j]如果为1,则说明i到j联通;如果为∞,则说明不连通(之所以用∞的原因是比较的时候无穷大一定比任何除无穷大以外的数的和都大,这样就不会把∞算进去),然后可以进一步将f[i][j]=1的地方利用两点间距离公式将1换成具体的距离

简单说一下思路:

根据题目给出的邻接矩阵,利用Floyd算法求出各个点间的最短路径,然后挨个输出所求点到每个点的最短路径,代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
int n,x,a[100][100];                           //a数组存放邻接矩阵
int ch;
const int maxn=0x3f3f3f3f;                     //给定一个很大的数,表示两点间不连通
int main()
{cin>>n>>x;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(scanf("%d",&ch)) a[i][j]=ch;       //如果输入合法,则赋值给a[i][j],0也包含 else a[i][j]=maxn;                    //如果不合法,说明不连通,赋值maxn
       }for(int k=1;k<=n;k++)                     //Floyd算法 for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(i!=j&&j!=k&&k!=i&&(a[i][j]>a[i][k]+a[k][j]))a[i][j]=a[i][k]+a[k][j];      //更新最短路 for(int i=1;i<=n;i++){if(i!=x){cout<<"("<<x<<" -> "<<i<<") = "<<a[x][i]<<endl;     //输出到其他点的最短路
        }}return 0;
}

转载于:https://www.cnblogs.com/xcg123/p/10745828.html

一本通网站 1378:最短路径(shopth)相关推荐

  1. 信息学奥赛一本通网站1672:游戏通关

    如果你正在找这道题不超时(或者和自己的AC算法不一样)的算法,并且恰好像本蒟蒻一样会树状数组不会线段树,继续往下看 网址:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn) 这道题的贪心 ...

  2. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  3. 信息学奥赛一本通 1227:Ride to Office | OpenJudge NOI 4.6 2404:Ride to Office

    [题目链接] ybt 1227:Ride to Office OpenJudge NOI 4.6 2404:Ride to Office 原题是英文题,虽说两题题意相同,但一本通网站没有对该问题进行直 ...

  4. 【信息学奥赛一本通】题解大全

    信息学奥赛一本通网站:点击这里 [语言及算法基础篇] 第一部分:C++语言 第一章:C++语言入门 T1000    入门测试题目      点击这里 T1001    Hello,World!    ...

  5. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  6. 信息学奥赛一本通 1294:Charm Bracelet | OpenJudge NOI 2.6 7113:Charm Bracelet | 洛谷 P2871

    [题目链接] ybt 1294:Charm Bracelet OpenJudge NOI 2.6 7113:Charm Bracelet 洛谷 P2871 [USACO07DEC]Charm Brac ...

  7. 提高篇 第一部分 基础算法 第1章 贪心算法

    一本通提高篇在线提交地址 一本通提高篇在线提交地址_老象的专栏-CSDN博客 [ 贪心 进阶总结 ][ 来自一本通提高篇 ] [ 贪心 进阶总结 ][ 来自一本通提高篇 ]_violinwang-CS ...

  8. 信息技术课python培训心得

    最近我一直在思考我要过怎样的人生?我明年有什么期待?我的三个核心目标是什么?连续两年跟着永澄老师一起认真制定年目标的过程让我体会到了笃定感对于目标的意义,目标绝对不是转瞬即逝的想法,而是经过深度思考后 ...

  9. C++语言基础篇学习总结及心得体会(难度极低)

    关于C++的语言部分(信息学奥赛一本通),我自己总结了一部分的知识. 因为过于基础,第一部分源代码的简介和使用我就不讲了. 我直接从第二章顺序结构程序设计开始讲.首先,我认为在这一章内只要理解一个因果 ...

最新文章

  1. HttpClient 详解一《C#高级编程(第9版)》
  2. 新计算机教师工作随笔反思,信息技术反思随笔 (2)
  3. python处理excel大数据-Python实现大数据收集至excel的思路详解
  4. 自己写getElementsByClass()方法
  5. C++模板声明与实现分开--由此想到的编译,链接原理
  6. python表示矩阵
  7. nginx缓存服务器
  8. 如何自定义 maven中的archetype
  9. 令牌桶算法和漏桶算法python_图解Python算法
  10. ubuntu命令和配置文件 修改IP
  11. 读Pyqt4教程,带你入门Pyqt4 _007
  12. php中对文件的读取和写入
  13. user 不在 sudoers 文件中。此事将被报告。
  14. 解决Object() takes on paramenters的问题
  15. 关于DSP2812的Timer0定时器配置程序的质疑
  16. 黑群DS3617xs 6.2.3套件中心无法添加第三方源/添加第三方源失败解决方案/群晖套件中心无效的位置解决
  17. 电容或电感的电压_测量电容或电感的电路
  18. c语言将首字母变大写,c语言问题 将首字母变为大写
  19. fastqc v0.11.8
  20. 雷军2001年去搜狐见张朝阳不是为面试 而是给卓越网拉融资

热门文章

  1. sf | 空间矢量对象的几何信息处理方法
  2. kesioncms ajax分页,改进KesionCMS V9.0x SQL标签分页支持嵌套
  3. java 原子量_JAVA线程10 - 新特性:原子量
  4. python计算在月球的体重_NumPy-快速处理数据--矩阵运算
  5. python平稳性检验_Python中非平稳时间序列的处理
  6. 学UI设计就业难吗?
  7. Web前端新手必看的7种技术,从菜鸟到高级开发的蜕变!
  8. 为什么前端工程师薪资越来越高?
  9. android 系统联系人,Android读取系统联系人
  10. android系统应用程序,Android调用系统应用程序