【普及模拟】城市连接

这是一篇关于模拟城市连接的算法问题解析。博客介绍了如何解决从OI总部到超级大牛家的最短路径问题,指出动态规划的常规方法在此问题中不适用,并推荐使用Dijkstra算法来寻找单源最短路径。文章包含代码示例。
摘要由CSDN通过智能技术生成

【普及模拟】城市连接

题目描述

天网恢恢,疏而不漏,经过上一次的抓捕,OI总部终于获取了怪盗的特征!现在,我们需要在基德再次来之前就把他的特征送到超级大牛的手上,可惜超级大牛不在总部,所以飞过海必须尽快把资料送到大牛家里。已知OI总部到大牛家中间有n-2个城城市,为了尽快达到目的地,飞过海通过水晶球了解到OI总部到大牛家的路线图,图上显示了n个城之间的连接距离。
可是飞过海很忙,需要请你来帮忙编写一个程序。

输入

输入文件中的第一行为一个整数n(n<=1000)。
第二行至第n+1行,每行有n个数。其中:第i+1行中表示第i个城市与其他城市之间的连接关系,0表示不连接,其它数字表示连接的距离。

输出

输出文件中的第一行为n个整数,表示所选的线路。
第二行中为一个数,表示最短距离。

样例输入

7
0 3 5 0 0 0 0
0 0 0 7 8 6 0
0 0 0 0 4 5 0
0 0 0 0 0 0 4
0 0 0 0 0 0 7
0 0 0 0 0 0 6
0 0 0 0 0 0 0

样例输出

1 2 4 7
14

一看到这道题,便想起了动态规划
的经典例题中的城市交通网,我本想套进去的,可是事实
证明不行。

因为它的动态转方程是:f[i]=min(f[k]+a[i][k],f[i]);
所以,假设i=5,k=2,并且 f[k]+a[i][k]<f[i];
这样表面看起来好像是对了,但是如果我们,f[i]表示第i个城市到第n个城市距离。
那么就错了。f[2]假设到n的路径是2->3->7,而f[5]假设是5->6->7!
想必大家已经明白了吧!
于是我们便可以用最短路,又因为是求单源路径,
我们就可以没必要用SPFA!dijk即可

code:

#include <stdio.h>
#include <string.h>
const int inf = 99999999;
struct edge {
   
    int u, v,<
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值