POJ
来源:互联网 发布:2017年快餐行业数据 编辑:程序博客网 时间:2024/06/08 02:22
题目大意:给出一个 n×n 邻接矩阵的下三角,x 表示不可达,A(i, j) = A(j, i),i == j 时为 0,求 1 到其余点最小花费时间中的最大值
解题思路:裸最短路
dijkstra:
Time(ms):16
Mem(MB):0.2
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<cmath>#include<string.h>#include<string>#include<queue>#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))const int INF = 0x3f3f3f3f;const int NINF = -INF -1;const int MAXN = 100+5;using namespace std;int map[MAXN][MAXN];int dis[MAXN];bool vis[MAXN];int n;void dijkstra() { for (int i = 1; i <= n; i++) dis[i] = map[1][i]; for (int i = 1; i <= n; i++) { int v, minn = INF; for (int j = 1; j <= n; j++) if (!vis[j] && dis[j] < minn) { minn = dis[j]; v = j; } vis[v] = true; for (int j = 1; j <= n; j++) if (!vis[j] && dis[v] + map[v][j] < dis[j]) dis[j] = dis[v] + map[v][j]; }}int main() { while (scanf("%d", &n) != EOF) { for (int i = 1; i <=n; i++) for (int j = 1; j <= n; j++) if (i == j) map[i][j] = 0; else map[i][j] = INF; char s[10]; for (int i = 2; i <= n; i++) for (int j = 1; j < i; j++) { scanf("%s", s); if (s[0] != 'x') map[i][j] = map[j][i] = atoi(s); } dijkstra(); int ans = 0; for (int i = 1; i <= n; i++) if (dis[i] > ans) ans = dis[i]; printf("%d\n", ans); } return 0;}
spfa:
Time(ms):16
Mem(MB):0.3
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<cmath>#include<string.h>#include<string>#include<queue>#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))const int INF = 0x3f3f3f3f;const int NINF = -INF -1;const int MAXN = 100+5;using namespace std;int map[MAXN][MAXN];int dis[MAXN];bool vis[MAXN];int n;void spfa() { int bg = 1; queue<int> q; memset(vis, 0, sizeof(vis)); for (int i = 1; i <= n; i++) dis[i] = INF; q.push(bg); dis[1] = 0; vis[1] = 1; while (!q.empty()) { int v = q.front(); q.pop(); vis[v] = 0; for (int i = 1; i <= n; i++) { if (dis[i] > dis[v] + map[v][i]) { dis[i] = dis[v] + map[v][i]; if (!vis[i]) { q.push(i); vis[i] = 1; } } } }}int main() { while (scanf("%d", &n) != EOF) { for (int i = 1; i <=n; i++) for (int j = 1; j <= n; j++) if (i == j) map[i][j] = 0; else map[i][j] = INF; char s[10]; for (int i = 2; i <= n; i++) for (int j = 1; j < i; j++) { scanf("%s", s); if (s[0] != 'x') map[i][j] = map[j][i] = atoi(s); } spfa(); int ans = 0; for (int i = 1; i <= n; i++) if (dis[i] > ans) ans = dis[i]; printf("%d\n", ans); } return 0;}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- 单节点安装OpenStack 之 安装环境准备
- LeetCode-Majority Element
- 【python 爬虫】识别网站所用技术
- 单例模式的5种实现方式,以及在多线程环境下5种创建单例模式的效率
- 【2017西安网络赛】E Maximum Flow
- POJ
- Linux命令之cut
- 【Summary】——>Web组·大三·Week1
- hosts文件的作用
- C语言返回2个变量的方法
- ajax同步与异步的区别
- eclipse
- 对XML进行解释
- sql server 带有OUTPUT的INSERT,DELETE,UPDATE