hdu 1596 find the safest road(最短路径,邻接矩阵)

2024-03-27 23:48

本文主要是介绍hdu 1596 find the safest road(最短路径,邻接矩阵),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:http://acm.hdu.edu.cn/showproblem.php?pid=1596

考验图论中的最短路径问题。需要做一点小小的处理,把原算法中的if(dist[j]>dist[k]+map[k][j])dist[j]=dist[k]+map[k][j];改成if(dist[j]<dist[k]*map[k][j])dist[j]=dist[k]*map[k][j];其他就没啥了。

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,i,j;
const int maxn=1005;
double map[maxn][maxn],dis[maxn],pre[maxn];
void Dijkstra(int s){bool tag[maxn];double mmax;int k;memset(tag,0,sizeof(tag));memset(dis,0,sizeof(dis));tag[s]=1;for(i=1;i<=n;i++){dis[i]=map[s][i];}for(i=1;i<n;i++){mmax=0;k=0;for(j=1;j<=n;j++){if(mmax<dis[j]&&!tag[j]&&dis[j]>0){k=j;mmax=dis[j];}}if(!k)return ;tag[k]=1;for(j=1;j<=n;j++){if(!tag[j]&&(dis[j]<map[k][j]*dis[k])){dis[j]=map[k][j]*dis[k];}}}
}
int main()
{//freopen("cin.txt","r",stdin);while(cin>>n){for(i=1;i<=n;i++){for(j=1;j<=n;j++){scanf("%lf\n",&map[i][j]);}}int q;scanf("%d",&q);for(int ix=0;ix<q;ix++){int a,b;scanf("%d%d",&a,&b);Dijkstra(a);double ans=dis[b];if(ans<1e-6)printf("What a pity!\n");else  printf("%.3lf\n",ans);}}return 0;
}

写的过程中,曾出现过一个神奇的现象,原来的主函数中第二个for循环是这样的:

for(i=0;i<q;i++){int a,b;scanf("%d%d",&a,&b);Dijkstra(a);double ans=dis[b];if(ans<1e-6)printf("What a pity!\n");else  printf("%.3lf\n",ans);}

结果每次没有输入q次a,b就跳出了循环,我下了身冷汗~原来是全局变量搞的鬼,调用Dijkstra函数后i的值被改变了。

这篇关于hdu 1596 find the safest road(最短路径,邻接矩阵)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/853803

相关文章

随想录 Day 69 并查集 107. 寻找存在的路径

随想录 Day 69 并查集 107. 寻找存在的路径 理论基础 int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好vector<int> father = vector<int> (n, 0); // C++里的一种数组结构// 并查集初始化void init() {for (int i = 0; i < n; ++i) {father[i] = i;}

SQL Server中,用Restore DataBase把数据库还原到指定的路径

restore database 数据库名 from disk='备份文件路径' with move '数据库文件名' to '数据库文件放置路径', move '日志文件名' to '日志文件存放置路径' Go 如: restore database EaseWe from disk='H:\EaseWe.bak' with move 'Ease

06-6.2.1 邻接矩阵法

👋 Hi, I’m @Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771@qq.com 喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会

LeetCode--214 最短回文串

题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 示例 1:输入: "aacecaaa"输出: "aaacecaaa"示例 2:输入: "abcd"输出: "dcbabcd" 思路: 我们需要添加多少个字符与给定字符串的前缀子串回文的长度有关. 也就是说去掉其前缀的回文子串,我们只需要补充剩下的子串的逆序

C# 命名管道中客户端访问服务器时,出现“对路径的访问被拒绝”

先还原一下我出现错误的情景:我用C#控制台写了一个命名管道服务器,然后用ASP.NET写了一个客户端访问服务器,运行之后出现了下面的错误: 原因:服务器端的访问权限不够,所以是服务器端的问题,需要增加访问权限。(网上很多都说是文件夹的权限不够,情况不同,不适用于我这种情况) 解决办法: (1)在服务器端相应地方添加以下代码。 PipeSecurity pse = new PipeSec

代码随想录算法训练营第三十九天|62.不同路径 63. 不同路径 II 343.整数拆分 96.不同的二叉搜索树

LeetCode 62.不同路径 题目链接:62.不同路径 踩坑:二维的vector数组需要初始化,否则会报错访问空指针 思路: 确定动态数组的含义:dp[i][j]:到达(i,j)有多少条路经递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]初始化动态数组:dp[0][0] = 1遍历顺序:从左到右,从上到下 代码: class Solution {pu

上海邀请赛 A题目 HDU 5236(dp)

先求出没有ctrl+s的时候构造长度为i的期望f[i] 。然后枚举保存的次数,求出最小即可。 #include<cstdio>#include<cstdio>#include<cmath>#include<queue>#include<stack>#include<string>#include<cstring>#include<iostream>#include<map>

hdu 2586 树上点对最近距离 (lca)

,只要知道dis[i][j]=dis[i][root]+dis[j][root]-2*dis[Lca(i,j)][root].   其中root为树的根节点,LCA(i,j)为i,j的最近公共祖先。 所以我们先把所有的询问储存下来,然后离线直接查询。复杂度是o(n+q)的。 VIE #include<cstdio>#include<algorithm>#include<i

WinCE的C#程序中获取当前应用程序的路径

WinCE中获取当前路径的两种方法: string appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); string appPath = System.IO.Path.GetDirectoryName(System.R