博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1502 单源最短路径
阅读量:7126 次
发布时间:2019-06-28

本文共 2497 字,大约阅读时间需要 8 分钟。

一、题目大意

无向图,给出邻接矩阵的下半矩阵,要求源点1,到其他点最短时间(散播整个网络的最短时间)。

二、AC code

明显的单源最短路径

但是还是用了Floyd算法撞撞运气,毕竟是无向图,当然可以对Floyd优化,最后也可以A。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#define INF 0x3f3f3f3fusing namespace std;template
Type stringToNum(const string& str){ istringstream iss(str); Type num; iss >> num; return num; }//======================================================#define MAXN 102int map[MAXN][MAXN];int main(){ //freopen("input.txt","r",stdin); int n; cin >> n; for (int i = 2; i <= n; ++i) { for (int j = 1; j < i; ++j) { string s; cin>>s; int tmp = INF; if(s != "x"){ tmp = stringToNum
(s); } map[j][i] = map[i][j] = tmp; } } //floyd for (int k = 1; k <= n; ++k) { for (int i = 1; i <= n; ++i) { for (int j = 1; j < i; ++j) { map[j][i] = map[i][j] = min(map[i][j],map[i][k]+map[k][j]); } } } int time = -1; for (int i = 2; i <= n ; ++i) { time = time > map[1][i]? time : map[1][i]; } cout<

dijkstra:

重定向忘记删掉,WA一次,甚是可惜

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#define INF 0x3f3f3f3fusing namespace std;template
Type stringToNum(const string& str){ istringstream iss(str); Type num; iss >> num; return num; }//======================================================#define MAXN 102int map[MAXN][MAXN];bool visited[MAXN];void update(int minPos,int n) { for (int i = 1; i <= n; ++i) { if( !visited[i] && map[1][i] > map[1][minPos] + map[minPos][i] ) map[i][1] = map[1][i] = map[1][minPos] + map[minPos][i]; }}void dijkstra(int n) { visited[1] = 1; while(1) { int tmpMin = INF; int minPos = -1; for (int i = 2; i <= n; ++i) { if( !visited[i] && tmpMin > map[1][i] ) { //have not been visited && smaller tmpMin = map[1][i]; minPos = i; } } if( -1 == minPos ) break; visited[minPos] = 1; update(minPos,n); //update the map, if it's shorter to get through minPos }}int main(){ //freopen("input.txt","r",stdin); int n; cin >> n; for (int i = 2; i <= n; ++i) { for (int j = 1; j < i; ++j) { string s; cin>>s; int tmp = INF; if(s != "x"){ tmp = stringToNum
(s); } map[j][i] = map[i][j] = tmp; } } dijkstra(n); int time = -1; for (int i = 2; i <= n ; ++i) { time = time > map[1][i]? time : map[1][i]; } cout<

转载地址:http://kxoel.baihongyu.com/

你可能感兴趣的文章
Seajs源码解读
查看>>
CSS世界(文档)
查看>>
Laravel.log 文件写入的问题
查看>>
React专题:什么是UI
查看>>
字符图像识别——数字字母混合
查看>>
【Redis学习笔记】2018-06-27 incr、unlink命令
查看>>
【跃迁之路】【515天】程序员高效学习方法论探索系列(实验阶段272-2018.07.05)...
查看>>
SEO优化之浅谈蜘蛛日志
查看>>
如何理解Python装饰器
查看>>
300行Kotlin代码实现的区块链
查看>>
Q3 财报让英伟达股价暴跌超 16%,罪魁祸首却是加密货币
查看>>
如何用Docker编排容器
查看>>
解决git push代码到github上一直提示输入用户名及密码的问题
查看>>
Angular2生命周期钩子函数
查看>>
【Arduino基础教程】RS1307时钟模块
查看>>
10月22日科技联播:饿了么与屈臣氏达成合作;马蜂窝回应数据造假
查看>>
win10电脑桌面便签怎么固定在桌面?
查看>>
[Spring] Web层AOP方式进行参数校验
查看>>
Java入门之继承(上)
查看>>
《Scikit-Learn与TensorFlow机器学习实用指南》 第05章 支持向量机
查看>>