gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Merge
0 1 0
merge default
0 files changed with 1 insertions and 1 deletions:
↑ Collapse diff ↑
Ignore white space 96 line context
... ...
@@ -70,97 +70,97 @@
70 70
  if(report) std::cerr << "Run Dijkstra: " << t << '\n';
71 71
}
72 72

	
73 73
template<class Value>
74 74
void solve_max(ArgParser &ap, std::istream &is, std::ostream &,
75 75
               Value infty, DimacsDescriptor &desc)
76 76
{
77 77
  bool report = !ap.given("q");
78 78
  Digraph g;
79 79
  Node s,t;
80 80
  Digraph::ArcMap<Value> cap(g);
81 81
  Timer ti;
82 82
  ti.restart();
83 83
  readDimacsMax(is, g, cap, s, t, infty, desc);
84 84
  if(report) std::cerr << "Read the file: " << ti << '\n';
85 85
  ti.restart();
86 86
  Preflow<Digraph, Digraph::ArcMap<Value> > pre(g,cap,s,t);
87 87
  if(report) std::cerr << "Setup Preflow class: " << ti << '\n';
88 88
  ti.restart();
89 89
  pre.run();
90 90
  if(report) std::cerr << "Run Preflow: " << ti << '\n';
91 91
  if(report) std::cerr << "\nMax flow value: " << pre.flowValue() << '\n';  
92 92
}
93 93

	
94 94
void solve_mat(ArgParser &ap, std::istream &is, std::ostream &,
95 95
              DimacsDescriptor &desc)
96 96
{
97 97
  bool report = !ap.given("q");
98 98
  Graph g;
99 99
  Timer ti;
100 100
  ti.restart();
101 101
  readDimacsMat(is, g, desc);
102 102
  if(report) std::cerr << "Read the file: " << ti << '\n';
103 103
  ti.restart();
104 104
  MaxMatching<Graph> mat(g);
105 105
  if(report) std::cerr << "Setup MaxMatching class: " << ti << '\n';
106 106
  ti.restart();
107 107
  mat.run();
108 108
  if(report) std::cerr << "Run MaxMatching: " << ti << '\n';
109 109
  if(report) std::cerr << "\nCardinality of max matching: "
110 110
                       << mat.matchingSize() << '\n';  
111 111
}
112 112

	
113 113

	
114 114
template<class Value>
115 115
void solve(ArgParser &ap, std::istream &is, std::ostream &os,
116 116
           DimacsDescriptor &desc)
117 117
{
118
  std::stringstream iss(ap["infcap"]);
118
  std::stringstream iss(static_cast<std::string>(ap["infcap"]));
119 119
  Value infty;
120 120
  iss >> infty;
121 121
  if(iss.fail())
122 122
    {
123 123
      std::cerr << "Cannot interpret '"
124 124
                << static_cast<std::string>(ap["infcap"]) << "' as infinite"
125 125
                << std::endl;
126 126
      exit(1);
127 127
    }
128 128
  
129 129
  switch(desc.type)
130 130
    {
131 131
    case DimacsDescriptor::MIN:
132 132
      std::cerr <<
133 133
        "\n\n Sorry, the min. cost flow solver is not yet available.\n";
134 134
      break;
135 135
    case DimacsDescriptor::MAX:
136 136
      solve_max<Value>(ap,is,os,infty,desc);
137 137
      break;
138 138
    case DimacsDescriptor::SP:
139 139
      solve_sp<Value>(ap,is,os,desc);
140 140
      break;
141 141
    case DimacsDescriptor::MAT:
142 142
      solve_mat(ap,is,os,desc);
143 143
      break;
144 144
    default:
145 145
      break;
146 146
    }
147 147
}
148 148

	
149 149
int main(int argc, const char *argv[]) {
150 150
  typedef SmartDigraph Digraph;
151 151

	
152 152
  typedef Digraph::Arc Arc;
153 153

	
154 154
  std::string inputName;
155 155
  std::string outputName;
156 156

	
157 157
  ArgParser ap(argc, argv);
158 158
  ap.other("[INFILE [OUTFILE]]",
159 159
           "If either the INFILE or OUTFILE file is missing the standard\n"
160 160
           "     input/output will be used instead.")
161 161
    .boolOption("q", "Do not print any report")
162 162
    .boolOption("int","Use 'int' for capacities, costs etc. (default)")
163 163
    .optionGroup("datatype","int")
164 164
#ifdef HAVE_LONG_LONG
165 165
    .boolOption("long","Use 'long long' for capacities, costs etc.")
166 166
    .optionGroup("datatype","long")
0 comments (0 inline)