kruskalbox.cc
author ladanyi
Wed, 02 Jan 2008 21:03:09 +0000
changeset 201 879e47e5b731
parent 194 6b2b718420eb
permissions -rw-r--r--
Merge branches/akos to trunk.
alpar@174
     1
/* -*- C++ -*-
alpar@174
     2
 *
alpar@174
     3
 * This file is a part of LEMON, a generic C++ optimization library
alpar@174
     4
 *
alpar@174
     5
 * Copyright (C) 2003-2006
alpar@174
     6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@174
     7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@174
     8
 *
alpar@174
     9
 * Permission to use, modify and distribute this software is granted
alpar@174
    10
 * provided that this copyright notice appears in all copies. For
alpar@174
    11
 * precise terms see the accompanying LICENSE file.
alpar@174
    12
 *
alpar@174
    13
 * This software is provided "AS IS" with no warranty of any kind,
alpar@174
    14
 * express or implied, and with no claim as to its suitability for any
alpar@174
    15
 * purpose.
alpar@174
    16
 *
alpar@174
    17
 */
alpar@174
    18
hegyi@194
    19
#include <lemon/kruskal.h>
hegyi@194
    20
hegyi@194
    21
#include <mapstorage.h>
hegyi@194
    22
#include <mapselector.h>
hegyi@194
    23
#include <algobox.h>
hegyi@106
    24
#include <kruskalbox.h>
hegyi@106
    25
hegyi@109
    26
enum {INPUT, OUTPUT, MAP_NUM};
hegyi@109
    27
hegyi@108
    28
KruskalBox::KruskalBox(std::vector<std::string> t):AlgoBox()
hegyi@106
    29
{
hegyi@108
    30
  init(t);
hegyi@106
    31
}
hegyi@106
    32
    
hegyi@106
    33
void KruskalBox::run()
hegyi@106
    34
{
hegyi@114
    35
  if(
ladanyi@201
    36
      tabcbt.get_active_text()!="" &&
ladanyi@201
    37
      (edgemapcbts[INPUT])->get_active_text()!="" &&
ladanyi@201
    38
      (edgemapcbts[OUTPUT])->get_active_text()!=""
ladanyi@201
    39
    )
ladanyi@201
    40
  {
ladanyi@201
    41
ladanyi@201
    42
    const Graph &g=mapstorage->getGraph();
ladanyi@201
    43
    std::string input_map_name = edgemapcbts[INPUT]->get_active_text();
ladanyi@201
    44
    Graph::EdgeMap<bool> outputmap(g);
ladanyi@201
    45
    const MapStorage::NumericEdgeMap& inputmap=
ladanyi@201
    46
      mapstorage->getNumericEdgeMap(input_map_name);
ladanyi@201
    47
    double res=kruskal(g, inputmap, outputmap);
ladanyi@201
    48
ladanyi@201
    49
    for (EdgeIt i(g); i!=INVALID; ++i)
hegyi@114
    50
    {
ladanyi@201
    51
      if(outputmap[i])
ladanyi@201
    52
      {
ladanyi@201
    53
        mapstorage->set(edgemapcbts[OUTPUT]->get_active_text(), i, 1.0);
ladanyi@201
    54
      }
ladanyi@201
    55
      else
ladanyi@201
    56
      {
ladanyi@201
    57
        mapstorage->set(edgemapcbts[OUTPUT]->get_active_text(), i, 0.0);
ladanyi@201
    58
      }
ladanyi@201
    59
    }
hegyi@109
    60
ladanyi@201
    61
    std::ostringstream o;
ladanyi@201
    62
    o << "Result: " << res;
ladanyi@201
    63
    resultlabel.set_text(o.str());
hegyi@109
    64
ladanyi@201
    65
    mapstorage->mapChanged(true, (edgemapcbts[OUTPUT])->get_active_text());
ladanyi@201
    66
    //   mapstorage->changeActiveMap(true, E_COLOR,
ladanyi@201
    67
    // 			      (edgemapcbts[OUTPUT])->get_active_text());
ladanyi@201
    68
    //   mapstorage->changeActiveMap(true, E_TEXT,
ladanyi@201
    69
    // 			      (edgemapcbts[INPUT])->get_active_text());
hegyi@111
    70
ladanyi@201
    71
  }
hegyi@106
    72
}
hegyi@106
    73
    
hegyi@106
    74
void KruskalBox::build_box()
hegyi@106
    75
{
hegyi@114
    76
  std::vector<std::string> empty_vector;
hegyi@114
    77
ladanyi@201
    78
  addMapSelector("Edgecosts: ", true, NUM);
ladanyi@201
    79
  addMapSelector("Edges of tree here: ", true, NUM);
hegyi@109
    80
hegyi@109
    81
  resultlabel.set_text("Result: algorithm is not run yet.");
hegyi@109
    82
  pack_start(resultlabel);
hegyi@106
    83
}