一本通网站 1378:最短路径(shopth)

【题目描述】

给出一个有向图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

时间: 2024-10-13 22:46:57

一本通网站 1378:最短路径(shopth)的相关文章

一本通网站基础篇完结纪念

一本通网站基础篇题目终于完结,发篇随笔纪念下这一伟大时刻的到来. 一本通网站基础篇题目所有AC代码(点此进入) 说明:此篇所有代码均为网站提交通过的代码且基本都是本人亲写.(当然部分题目也可能参考了网站其他文章.请教了其他老师),如发现代码有错,烦请告知,感谢! 特别明谢:之江学院石老师.江西省丰城中学熊雪芬老师.成都石室中学文老师(也是此网站管理)等给了我很大帮助,还有我的学员督促和鼓励. 友情链接:  (进来了不防帮忙点下上面“我要自学网”图标链接,此链接为我学习网站的推广,换点积分,非常感

一本通网站 1424:【例题3】喷水装置 及 贪心总结

原题   传送门 [题目描述] 长 LL 米,宽 WW 米的草坪里装有 nn 个浇灌喷头.每个喷头都装在草坪中心线上(离两边各 W2W2 米).我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围. 请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头? [输入] 输入包含若干组测试数据. 第一行一个整数 TT 表示数据组数: 每组数据的第一行是整数 nn.LL 和 WW: 接下来的 nn 行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据

一本通网站 1433:【例题1】愤怒的牛

原题 传送门 [题目描述] 农夫 John 建造了一座很长的畜栏,它包括N (2 ≤ N ≤ 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 ≤ xi ≤ 1,000,000,000). 但是,John的C (2 ≤ C ≤ N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢 [输入] 第一行:空格分隔的两个整数N和C: 第二行---

一本通基础篇图论

1341 一笔画问题 1 #include <cstdio> 2 #include <algorithm> 3 #include <stack> 4 using namespace std; 5 const int MAXN = 110000,MAXM = 510000; 6 stack <int> stk; 7 int head[MAXN],ind[MAXN]; 8 int to[MAXM],nxt[MAXM],idx[MAXM]; 9 int cnt,n

C++初学者常犯的错(持续更新)

对于一个初学者来说,常犯错是很正常的,就算是有了定功底的人也会犯一些低级错误,这很正常.现对我和学员常犯的错作一点整理,与大家共勉 1.一个变量未初始化就开始使用(如果定义在全局,变量会自动初始化,不在此列).比如    int a,sum;        cin>>a;    sum+=a;    cout<<sum;2.相等判断“日常化”.比如比较两数大小    if(a>b)cout<<">";         else if(a=

一个差生解1642Fibonacci 第 n 项

1642: [例 2]Fibonacci 第 n 项 时间限制: 1000 ms 内存限制: 524288 KB 提交数: 70 通过数: 22 [题目描述] 大家都知道 Fibonacci 数列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2 . 现在问题很简单,输入 nn 和 mm,求 fnmodmfnmodm. [输入] 输入 n,mn,m. [输出] 输出 fnmodmfnmodm. [输入样例]

大型网站核心架构要素 之二(细解网站的高性能架构)

一.不同视角下的网站高性能指标,以及其优化 1.开发人员的视角 开发人员关注的主要是应用程序本身及其相关子系统的性能,包括响应延迟.系统吞吐量.并发处理能力.系统稳定性等技术指标.优化网站性能的主要手段包括 使用缓存加速数据读取,使用集群提高吞吐能力,使用异步消息加快请求响应及实现削峰,使用代码优化手段改善网站性能. 2.运维人员视角 运维人员更关注基础设施性能和资源利用率,如网络运营商的宽带能力.服务器硬件的配置.数据中心网络架构.服务器和网络带宽的资源利用率等.主要优化手段有建设优化骨干网.

大型网站架构技术一览

网站系统架构层次:前端架构.应用层架构.服务层架构.存储层架构.后台架构.数据采集与监控.安全架构.数据中心机房架构. 1.前端架构(浏览器优化技术.CDN.动静分离,静态资源独立部署.图片服务.反向代理.DNS)前端指用户请求到达网站应用服务器之前经历的环节,通常不包含网站业务逻辑,不处理动态内容. 浏览器优化技术并不是优化浏览器,而是通过优化响应页面,加快浏览器页面的加载和显示,常用的有页面缓存.合并HTTP减少请求次数.使用页面压缩等. CDN内容分发网络,部署在网络运营商机房,通过将静态

大型网站架构技术总结

转自:http://www.pcsky.wang/archives/2267.html 1).前端架构: 1.前端指用户请求到网站应用服务器之前经历的环节,通常不包含网站业务逻辑,不处理动态内容. 2.浏览器技术优化技术. 并不是优惠浏览器,而是通过优化响应页面,加快浏览器页面的加载和显示,常用的有页面缓存,合并http减少请求次数,使用页面压缩等. 3.CDN: 内容分发网络 ,部署在网络运营机房,通过将静态页面内容分发到离用户最近的cdn服务器,使用户通过最短路径获取内容 4,动静分离,静态