1028: 安全路径(2014年中南大学研究生复试机试题 )

1028: 安全路径

时间限制: 1 Sec  内存限制: 128 MB
提交: 228  解决: 96
[提交][状态][讨论版]

题目描述

卫斯理小说经常提及外星人,比如蓝血人。 在土星星球有很多城市,每个城市之间有一条或多条飞行通道, 但是并不是所有的路都是很安全的,每一条路有一个安全系数 s,s 是在  0  和1 间的实数 (包括 0 , 1) ,一条从 u 到 v 的通道 P 的安全度为 Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 ,现在蓝血人想出去旅游,面对这这么多的路,他想找一条最安全的路。但是蓝血人的数学不好,想请你帮忙 ^_^ --

输入

输入包括多个测试实例,每个实例包括:

第一行: 一个整数  n。  n 表示城市的个数 n<=1000;

接着是一个 n*n 的矩阵表示两个城市之间的安全系数, (0可以理解为那两个城市之间没有直接的通道 )。接着是一个整数表示若干个蓝血人要旅游的路线 ,下面每行有两个数字,表示蓝血人所在的城市和要去的城市。

输出

如果蓝血人无法达到他的目的地,输出 "What a pity!" ,

其他的输出这两个城市之间的最安全道路的安全系数,保留三位小数。

样例输入

3
1 0.5 0.5
0.5 1 0.4
0.5 0.4 1
3
1 2
2 3
1 3

样例输出

0.500
0.400
0.500
 1 #include<iostream>
 2 #include<iomanip>
 3 using namespace std;
 4 /*根据起点和终点进行单源最短路径搜索,只需改造一下Dijkstra算法即可*/
 5 double security[1001][1001];
 6 bool isGo[1001];
 7 double dist[1001];
 8 int n;
 9 double Dijkstra(int start, int end){//这是我做的第一个此类算法的题,代码不是很好
10     for (int i = 0; i < 1001; i++){
11         isGo[i] = false;
12         dist[i] = 0;
13     }
14     dist[start] = 1;
15     for (int i = 1; i <= n; i++){
16         double max = 0;
17         int index = 0;
18         for (int j = 1; j <= n; j++){//最开始一定是选到源点
19             if (!isGo[j] && dist[j] > max){
20                 max = dist[j];
21                 index = j;
22             }
23         }
24         isGo[index] = true;
25         for (int j = 1; j <= n; j++){//加入新点后更新所有点到源点的安全系数
26             if (dist[j] < dist[index] * security[index][j]){
27                 dist[j] = dist[index] * security[index][j];
28             }
29         }
30     }
31     return dist[end];
32 }
33
34 int main(){
35     while (cin >> n){
36         for (int i = 1; i <= n; i++){
37             for (int j = 1; j <= n; j++){
38                 cin >> security[i][j];
39             }
40         }
41
42         int num;
43         cin >> num;
44         while (num){
45             num--;
46             int start, end;
47             cin >> start >> end;
48             double num = Dijkstra(start, end);
49
50             if (num != 0){
51                 cout.setf(ios::fixed);//固定小数点位数
52                 cout << fixed << setprecision(3) << num << endl;
53             }
54             else{
55                 cout << "What a pity!" << endl;
56             }
57         }
58     }
59     return 0;
60 }



原文地址:https://www.cnblogs.com/tangyimin/p/10543610.html

时间: 2024-08-22 20:18:12

1028: 安全路径(2014年中南大学研究生复试机试题 )的相关文章

1008: 最大连续子序列(2014年中南大学研究生复试机试题 )

1008: 最大连续子序列 时间限制: 1 Sec  内存限制: 128 MB提交: 461  解决: 80[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 给定 K 个整数的序列{ N1,  N2,  ..., NK } ,其任意连续子序列可表示为{ Ni, Ni+1,...,Nj} ,其中1 <= i<= j <= K.最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 } ,其最大连续子序列为{ 11, -4

1027: 逃离迷宫(2018年中南大学研究生复试机试题)

1027: 逃离迷宫 时间限制: 1 Sec  内存限制: 128 MB提交: 611  解决: 130[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 PIPI被困在一个迷宫中了!   给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,PIPI想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,PIPI可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,PIPI不能走到迷宫外面去.令人头痛的是,PIPI是个

1022: 淘金(2017年中南大学研究生复试机试题 )

1022: 淘金 时间限制: 1 Sec  内存限制: 128 MB提交: 205  解决: 75[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 在一片n*m的土地上,每一块1*1的区域里都有一定数量的金子.这一天,你到这里来淘金,然而当地人告诉你,如果你挖了某一区域的金子,上一行,下一行,左边,右边的金子你都不能被允许挖了.那么问题来了:你最多能淘金多少? 输入 对于每组数据,第一行两个数n,m,表示土地的长和宽(1<=n,m<=200) 接下来n行,每行m个数,表示每个区域

1021: 机器人走迷宫(2017年中南大学研究生复试机试题 )

1021: 机器人走迷宫 时间限制: 1 Sec  内存限制: 128 MB提交: 339  解决: 71[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 有一个愚蠢的机器人走进一个w*h的迷宫,迷宫里有空地和陷阱.他想要访问迷宫的每个方格,但是它很笨,只会按照指令的方向走.当机器人不能走的时候,也就是下一步会遇到陷阱.迷宫边界或者访问过的格子,它会向右转90度(顺时针旋转90度,不能访问已经访问过的方格,且在原地只转一次,移动后可获得又一次旋转机会).请问这个机器人最多可以经过多

1023: 巨人排队(2017年中南大学研究生复试机试题 )

1023: 巨人排队 时间限制: 1 Sec  内存限制: 128 MB提交: 185  解决: 58[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 巨人国的小学生放假了,老师要给小朋友们排队了.可是这个老师有强迫症,一定要路队上的小朋友按照身高从高到矮排序(也就是排在前面的不能比后面的矮).小朋友呢也很调皮,一旦老师给他排好队就不愿意动了.这个时候小朋友们一个一个的从教室里出来了,每个小朋友一出来老师就要给小朋友安排好位置.请问老师最少要给小朋友排几条路队呢? 输入 对于每组数

考研复试机试题(2010)

考研复试机试题(2010) 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 解答: /* * 描述: 机试题A解答 * 作者: 张亚超 * 博客: 牟尼的专栏 http://blog.csdn.net/u012027907 * 日期: 2014/7/21 */ #include "stdio.h" #define Max 1000 int getEveSum(int num){ //求各位的数字和 int sum = 0; while(num

考研复试机试题(2009)

Problem A:请写一个程序,给出指定整数范围[a ,b]内所有的完数,一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数,例如6是完数,因为6=1+2+3. 输入说明:共一组数据,为两个正整数,分别表示a和b(1<a<b<10^5). 输出说明:指定范围内的所有完数,每个数占一行. 输入样本 1 100 输出样本 6 28 解答: /* * 描述: 机试题A解答 * 作者: 张亚超 * 博客: 牟尼的专栏 http://blog.csdn.net/u012027907 *

惠民工程(2013中南大学研究生复试[最小生成树])

惠民工程 CSU - 1264 时限: 1000MS   内存: 131072KB   64位IO格式: %lld & %llu 提交 状态 已开启划词翻译 问题描述点击打开链接 市政府"惠民工程"的目标是在全市n个居民点间之架设煤气管道(但不一定有直接的管道相连,只要能间接通过管道可达即可).很显然最多可架设 n(n-1)/2条管道,然而实际上要连通n个居民点只需架设n-1条管道就可以了.现请你编写程序,计算出该惠民工程需要的最低成本. 输入 测试输入包含若干测试用例.每个测

水仙花数(2013中南大学研究生上机复试题)

1261: 水仙花数 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 633 Solved: 222 [Submit][Status][Web Board] 点击打开链接 Description 春天是鲜花灿烂的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:"水仙花数"是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3.现在要求输出所有在m和n范围内的水仙花数. Input 输入数据