hdu 1596 find the safest road (dijkstra)
2015-09-17 16:37
435 查看
find the safest road
题目链接:Problem - 1596题目大意:略
题目分析:水题,此题数据少,属于稠密图,可以用dijkstra做
思路分析:
1)double 数组存图
2)读取出发点和到达点,用dijkstra算法计算出最优路径
3)若路径不存在,输出“What a pity!"
贴AC代码:
#include <stdio.h> //定义输入/输出函数 #include <limits.h> //定义各种数据类型最值常量 #include <math.h> //定义数学函数 #include <stdlib.h> //定义杂项函数及内存分配函数 #include <string.h> //字符串处理 #include <algorithm>//算法 #include <queue>//队列 #include <stack>//栈 #include <vector> using namespace std; int n, Q, from, to, tmp; double map[1005][1005]; double low[1005]; bool vis[1005]; void dijkstra() { memset(low, 0, sizeof(low)); memset(vis, 0, sizeof(vis)); for (int i = 1; i <= n; i++){ if (map[from][i] == 0) continue; low[i] = map[from][i]; } vis[from] = 1; for (int i = 0; i < n - 1; i ++){ double maxs = 0; for (int j = 1; j <= n; j++){ if (low[j] > maxs && vis[j] == 0){ maxs = low[j]; tmp = j; } } vis[tmp] = 1; //printf("::%d || tmp = %d\n", i, tmp); //for (int k = 1; k <= n;k ++) // printf("%.3f ", low[k]); //printf("\n\n"); for (int j = 1; j <= n; j++){ if (map[tmp][j] == 0) continue; if (low[j] < low[tmp] * map[tmp][j]) low[j] = low[tmp] * map[tmp][j]; } } } int main() { while (scanf("%d", &n) != EOF && n){ for (int i = 1; i <= n; i ++) for (int j = 1; j <= n; j++) scanf("%lf", &map[i][j]); scanf("%d", &Q); while (Q--){ scanf("%d%d", &from, &to); dijkstra(); if (low[to] != 0.0) printf("%.3f\n", low[to]); else printf("What a pity!\n"); } } }
相关文章推荐
- 关于单行、多行文本超出显示省略号... css
- JavaScript基础知识点系列一
- 【NODE.JS】V8引擎简介
- weibo feed
- CSS圆角
- js去空格
- owncloud源码分析8--修改json文件存储
- 利用jquery实现导航栏
- 实现 WebSocket 断开自动重连的 JavaScript 库
- jQuery实现可用于博客的动态滑动菜单完整实例
- jsp里的四大作用域
- PHP版本Thread Safe(线程安全)Thread Safe(线程安全)区别
- jsoncpp编译方法 和 vs2010中导入第三方库的方法
- What's this?(js)
- 【CODE】DOM、Jquery、D3.js字体放大缩小效果
- What's this?(js)
- JSP九大内置对象
- HTML5 LocalStorage 本地存储
- jquery实现仿Flash的横向滑动菜单效果代码
- HTML超文本