程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVA 436 - Arbitrage (II)(floyd)

UVA 436 - Arbitrage (II)(floyd)

編輯:C++入門知識

UVA 436 - Arbitrage (II)(floyd)


UVA 436 - Arbitrage (II)

題目鏈接

題意:給定一些國家貨幣的匯率,問能否通過不斷換貨幣使錢得到增長

思路:floyd,完事後判斷一下有沒有連到自己能大於1的情況

代碼:

#include 
#include 
#include 
#include 
#include 
using namespace std;

const int N = 35;

int n;
double g[N][N];
map hash;

int main() {
	int cas = 0;
	while (~scanf("%d", &n) && n) {
		string a, b;
		hash.clear();
		for (int i = 1; i <= n; i++) {
			cin >> a;
			hash[a] = i;
		}
		int m;
		double f;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				if (i == j) g[i][j] = 1.0;
				else g[i][j] = 0;
			}
		}
		scanf("%d", &m);
		while (m--) {
			cin >> a >> f >> b;
			int u = hash[a], v = hash[b];
			g[u][v] = f;
		}
		for (int k = 1; k <= n; k++) {
			for (int i = 1; i <= n; i++) {
				for (int j = 1; j <= n; j++)
					g[i][j] = max(g[i][j], g[i][k] * g[k][j]);
			}
		}
		printf("Case %d: ", ++cas);
		int flag = 1;
		for (int i = 1; i <= n; i++) {
			if (g[i][i] > 1.0) {
				printf("Yes\n");
				flag = 0;
				break;
			}
		}
		if (flag) printf("No\n");
	}
	return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved