当前位置:编程学习 > C/C++ >>

POJ 2240 Arbitrage

跟原来的货币交换的题目类似,是说给你n中货币和m中货币之间的交换汇率,问你说能不能使财富增值。这里我用了map。Wrong了两次,一次边集数组开小了,还有就是Yes,No大小写看错了,伤心呐。影响早上的大好心情。Bellman-Ford.

代码:


[cpp] 
#include<iostream> 
#include<string> 
#include<map> 
#define maxn 40 
using namespace std; 
map<string,int> mp; 
struct Edge 

       int v,u; 
       double w; 
} e[1005]; 
int size,n; 
double dist[maxn]; 
void AddEdge(int a,int b,double c) 

     e[size].u=a; 
     e[size].v=b; 
     e[size].w=c; 
     size++; 

bool Bellman_Ford() 

     int i,j; 
     for( i=1; i<=n; i++){ 
          bool flag=false; 
          for( j=0; j<size; j++){ 
               // cout<<e[j].u<<' '<<e[j].w<<endl; 
               if( dist[e[j].u]*e[j].w>dist[e[j].v]){ 
                   dist[e[j].v]=dist[e[j].u]*e[j].w; 
                   flag=true; 
               } 
          } 
          if( !flag) break; 
          if( i==n&&flag) return true; 
     } 
     return false; 

int main() 

    int m,ca,i; 
    double c; 
    string str1,str2; 
    ca=0; 
    while( cin>>n&&n){ 
           ++ca; 
           mp.clear(); 
           for( i=1; i<=n; i++){ 
                cin>>str1; 
                mp[str1]=i; 
           } 
           cin>>m; 
           memset(e,0,sizeof(e)); 
           size=0; 
           while( m--){ 
                  cin>>str1>>c>>str2; 
                  AddEdge(mp[str1],mp[str2],c); 
           } 
          memset(dist,0,sizeof(dist)); 
                dist[1]=1; 
           cout<<"Case "<<ca<<": "; 
           if( Bellman_Ford()) 
               cout<<"Yes"<<endl; 
           else 
               cout<<"No"<<endl; 
    }  


作者:aacm1992
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,