poj1860
2013-03-06 23:33
120 查看
自己做的第一个图论题目,看别人的思路写的,第一次对最短路径有了一点的了解。
BellmanFord算法的应用,将每种种类的货币看成是一个点,算源点到源点的最长路径。每个点进行松弛的时候就按照(钱 - 佣金) * 比率来松弛
代码如下:
BellmanFord算法的应用,将每种种类的货币看成是一个点,算源点到源点的最长路径。每个点进行松弛的时候就按照(钱 - 佣金) * 比率来松弛
代码如下:
#include <stdio.h> #include <string.h> #define MAX_NUMBER 400 struct Edge { int start_point; int end_point; double commission; double rate; }; struct Edge edge[MAX_NUMBER]; int original_currency, point_number, currency_number; int edge_number; double distance[MAX_NUMBER]; double original_money; int bellmanFord() { int flag, i; int start_point, end_point; double temp_money; memset(distance, 0 ,sizeof(distance)); distance[original_currency] = original_money; while (distance[original_currency] <= original_money) { flag = 0; for (i = 0; i < edge_number; i++) { start_point = edge[i].start_point; end_point = edge[i].end_point; temp_money = (distance[start_point] - edge[i].commission) * edge[i].rate; if (distance[end_point] < temp_money) { distance[end_point] = temp_money; flag = 1; } } if (!flag) { return distance[original_currency] > original_money; } } return 1; } int main() { int start_point, end_point, i; double rate_a, commission_a, rate_b, commission_b; while (scanf("%d%d%d%lf", ¤cy_number, &point_number, &original_currency, &original_money) != EOF) { edge_number = 0; for (i = 0; i < point_number; i++) { scanf("%d%d%lf%lf%lf%lf", &start_point, &end_point, &rate_a, &commission_a, &rate_b, &commission_b); edge[edge_number].start_point = start_point; edge[edge_number].end_point = end_point; edge[edge_number].rate = rate_a; edge[edge_number].commission = commission_a; edge_number++; edge[edge_number].start_point = end_point; edge[edge_number].end_point = start_point; edge[edge_number].rate = rate_b; edge[edge_number].commission = commission_b; edge_number++; } if (bellmanFord()) { printf("YES\n"); } else { printf("NO\n"); } } }
相关文章推荐
- POJ 1860 Currency Exchange (BellmanFord算法逆用 判断图是否存在正环)
- POJ1860(ford判环)
- poj 1860 Currency Exchange
- POJ 1860 Currency Exchange
- POJ1860—Bellman-Ford算法
- POJ 1860:Currency Exchange(Bellman_Ford算法)
- [POJ1860 Currency Exchange]
- POJ 1860
- POJ 1860 Currency Exchange
- poj1860_类似负权回路
- POJ 1860 Currency Exchange(Bellman-Ford)
- poj 1860 Currency Exchange (最短路bellman_ford思想找正权环 最长路)
- poj 1860 最短路径变形
- POJ 1860 SPFA
- poj1860 最短路 无限增大环
- POJ1860 换零钱套利 图论(Bellman-ford)
- poj 1860 Currency Exchange(bellman-ford)
- POJ 1860 Currency Exchange
- poj1860
- POJ 1860 Currency Exchange