HDU-1217-Arbitrage
来源:互联网 发布:编程珠玑适合什么人看 编辑:程序博客网 时间:2024/06/05 08:35
ACM模版
描述
题解
真是炸了,题倒是十分简单,无非是求任意两点之间的最短路(变种,其实不是求最短,而是求最大连乘),之间用Floyd
搞搞就行,可是,我一开始用结构体存储,却一直出现bug
,到现在我都没有找到问题在哪儿(代码One),求大神们一瞥,给予我些许建议……
之后,我只好把结构体去了,直接开二维数组存,顺利AC(代码Two),真是个让人悲伤的故事……
代码
One:
// WA//#include <cstdio>//#include <iostream>//#include <string>//#include <map>////using namespace std;////typedef double typec;////map<string, int> money;/////*// * Floyd算法,求从任意节点i到任意节点j的最短路径// * edges[][]:初始化为0(edges[i][i]:初始化为1)// *///const int VertexNum = 33;////typedef struct//{// int N; // 图中当前的顶点数// typec edges[VertexNum][VertexNum]; // 邻接矩阵,可看做边表//} MGraph;////void Floyd(MGraph G)//{// int i, j, k, n = G.N;//// for (k = 1; k <= n; k++)// {// for (i = 1; i <= n; i++)// {// for (j = 1; j <= n; j++)// {// if (G.edges[i][j] < (G.edges[i][k] * G.edges[k][j]))// {// G.edges[i][j] = G.edges[i][k] * G.edges[k][j];// }// }// }// }// // return ;//}////MGraph G;////int main()//{// int n, m;// string str, str_;// double r;// // int iCase = 0;// while (scanf("%d", &n), n)// {// iCase++;// G.N = n;// for (int i = 1; i <= n; i++)// {// cin >> str;// money[str] = i;// }// for (int i = 1; i <= n; i++)// {// for (int j = 1; j <= n; j++)// {// if (i == j)// {// G.edges[i][j] = 1;// }// else// {// G.edges[i][j] = 0;// }// }// }// // scanf("%d", &m);// while (m--)// {// cin >> str >> r >> str_;// G.edges[money[str]][money[str_]] = r;// }// // Floyd(G);// // bool flag = false;// for (int i = 1; i <= n; i++)// {// if (G.edges[i][i] > 1)// {// flag = true;// break;// }// }// if (flag)// {// printf("Case %d: Yes\n", iCase);// }// else// {// printf("Case %d: No\n", iCase);// }// }// // return 0;//}
Two:
#include <cstdio>#include <iostream>#include <string>#include <map>using namespace std;typedef double typec;map<string, int> money;/* * Floyd算法,求从任意节点i到任意节点j的最短路径 * edges[][]:初始化为INF(edges[i][i]:初始化为0) */const int MAXN = 33;void Floyd(typec edges[][MAXN], int n){ int i, j, k; for (k = 1; k <= n; k++) { for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { if (edges[i][j] < (edges[i][k] * edges[k][j])) { edges[i][j] = edges[i][k] * edges[k][j]; } } } } return ;}double edges[MAXN][MAXN];int main(){ int n, m; string str, str_; double r; int iCase = 0; while (scanf("%d", &n), n) { iCase++; for (int i = 1; i <= n; i++) { cin >> str; money[str] = i; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (i == j) { edges[i][j] = 1; } else { edges[i][j] = 0; } } } scanf("%d", &m); while (m--) { cin >> str >> r >> str_; edges[money[str]][money[str_]] = r; } Floyd(edges, n); bool flag = false; for (int i = 1; i <= n; i++) { if (edges[i][i] > 1) { flag = true; break; } } if (flag) { printf("Case %d: Yes\n", iCase); } else { printf("Case %d: No\n", iCase); } } return 0;}
参考
《最短路》
0 0
- HDU 1217 Arbitrage
- hdu 1217 Arbitrage--Floyd
- Hdu-1217 Arbitrage
- HDU 1217 Arbitrage
- hdu 1217 Arbitrage
- hdu 1217 Arbitrage
- HDU 1217 Arbitrage
- hdu 1217 Arbitrage
- HDU 1217 Arbitrage
- HDU 1217 Arbitrage
- hdu 1217 Arbitrage
- HDU 1217 Arbitrage
- hdu 1217 Arbitrage
- hdu 1217 Arbitrage
- hdu 1217 Arbitrage
- HDU 1217 Arbitrage 图
- hdu 1217 Arbitrage
- hdu 1217 Arbitrage
- LeetCode No.448 Find All Numbers Disappeared in an Array
- stm32之usart配置
- ls命令介绍
- C++getline()函数解析
- HTML入门,HTML中UL跑到DIV外面去了
- HDU-1217-Arbitrage
- 2017校招数据分析岗笔试/面试知识点
- OpenWrt安装CIFS客户端挂载网络驱动器
- 基于贴标号算法的二值图像区域分割 面积计算
- [Linux C编程]linux下cat详解
- set中find()的用法
- WikiOI 1242 布局 (差分约束基础)
- spring注解
- python 学习汇总