bi_matching.c
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:1k
开发平台:

MultiPlatform

  1. #include <LEDA/graph.h>
  2. #include <LEDA/graph_alg.h>
  3. main()
  4. {
  5. GRAPH<int,int> G;
  6. list<node> A,B;
  7. edge e;
  8. test_bigraph(G,A,B);
  9. edge_array<int>  weight1(G);
  10. forall_edges(e,G) G[e] = weight1[e] =  rand_int(0,1000);
  11. if (Yes("show graph? ")) G.print();
  12. float T = used_time();
  13. cout << "MAX_CARD_BIPARTITE MATCHING            ";
  14. cout.flush();
  15. list<edge> M0 = MAX_CARD_BIPARTITE_MATCHING(G,A,B);
  16. cout << string("%5.2f sec    |M| = %dn",used_time(T), M0.length());
  17. /*
  18. if (Yes("output ? "))  
  19.    { newline;
  20.      forall(e,M0) { G.print_edge(e); newline; }
  21.      newline;
  22.     }
  23. */
  24. cout << "MAX_CARD_MATCHING                      ";
  25. cout.flush();
  26. list<edge> M1 = MAX_CARD_MATCHING(G);
  27. cout << string("%5.2f sec    |M| = %dn",used_time(T), M1.length());
  28. /*
  29. if (Yes("output ? "))  
  30.    { newline;
  31.      forall(e,M1) { G.print_edge(e); newline; }
  32.      newline;
  33.     }
  34. */
  35. newline;
  36. int w = 0;
  37. cout << "MAX_WEIGHT_BIPARTITE_MATCHING <int>    ";
  38. cout.flush();
  39. list<edge> M2 = MAX_WEIGHT_BIPARTITE_MATCHING(G,A,B,weight1);
  40. forall(e,M2)  w += weight1[e];
  41. cout << string("%5.2f sec   W = %dn",used_time(T),w);
  42. double W = 0;
  43. edge_array<double> weight2(G);
  44. forall_edges(e,G) weight2[e] =  weight1[e]/1000.0; 
  45. cout << "MAX_WEIGHT_BIPARTITE_MATCHING <double> ";
  46. cout.flush();
  47. list<edge> M3 = MAX_WEIGHT_BIPARTITE_MATCHING(G,A,B,weight2);
  48. forall(e,M3)  W += weight2[e];
  49. cout << string("%5.2f sec   W = %.2fn",used_time(T),W);
  50. return 0;
  51. }