- Main Page
- Namespaces
- Classes
- Files

- Search for |

# graph.cpp

    00001 /*
    00002 * <graph.cpp>
    00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
    00004 * (C) OPAC Team, LIFL, 2002-2007
    00005 *
    00006 * Sébastien Cahon, Jean-Charles Boisson
    00007 *
    00008 * This software is governed by the CeCILL license under French law and
    00009 * abiding by the rules of distribution of free software.  You can  use,
    00010 * modify and/ or redistribute the software under the terms of the CeCILL
    00011 * license as circulated by CEA, CNRS and INRIA at the following URL
    00012 * "http://www.cecill.info".
    00013 *
    00014 * As a counterpart to the access to the source code and  rights to copy,
    00015 * modify and redistribute granted by the license, users are provided only
    00016 * with a limited warranty  and the software's author,  the holder of the
    00017 * economic rights,  and the successive licensors  have only  limited liability.
    00018 *
    00019 * In this respect, the user's attention is drawn to the risks associated
    00020 * with loading,  using,  modifying and/or developing or reproducing the
    00021 * software by the user in light of its specific status of free software,
    00022 * that may mean  that it is complicated to manipulate,  and  that  also
    00023 * therefore means  that it is reserved for developers  and  experienced
    00024 * professionals having in-depth computer knowledge. Users are therefore
    00025 * encouraged to load and test the software's suitability as regards their
    00026 * requirements in conditions enabling the security of their systems and/or
    00027 * data to be ensured and,  more generally, to use and operate it in the
    00028 * same conditions as regards security.
    00029 * The fact that you are presently reading this means that you have had
    00030 * knowledge of the CeCILL license and that you accept its terms.
    00031 *
    00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
    00033 * Contact: paradiseo-help@lists.gforge.inria.fr
    00034 *
    00035 */
    00036
    00037 #include <fstream>
    00038 #include <iostream>
    00039 #include <math.h>
    00040
    00041 #include "graph.h"
    00042
    00043 namespace Graph {
    00044
    00045   static std :: vector <std :: pair <double, double> > vectCoord ; // Coordinates
    00046
    00047   static std :: vector <std :: vector <unsigned int> > dist ; // Distances Mat.
    00048
    00049   unsigned size ()
    00050   {
    00051     return dist.size () ;
    00052   }
    00053
    00054   void computeDistances ()
    00055   {
    00056
    00057     // Dim.
    00058     unsigned int numCities = vectCoord.size () ;
    00059     dist.resize (numCities) ;
    00060     for (unsigned int i = 0 ; i < dist.size () ; i ++)
    00061       {
    00062         dist [i].resize (numCities) ;
    00063       }
    00064
    00065     // Computations.
    00066     for (unsigned int i = 0 ; i < dist.size () ; i ++)
    00067       {
    00068         for (unsigned int j = i + 1 ; j < dist.size () ; j ++)
    00069           {
    00070             double distX = (double)(vectCoord [i].first - vectCoord [j].first) ;
    00071             double distY = (double)(vectCoord [i].second - vectCoord [j].second) ;
    00072             dist [i] [j] = dist [j] [i] = (unsigned) (sqrt ((float) (distX * distX + distY * distY)) + 0.5) ;
    00073           }
    00074       }
    00075   }
    00076
    00077   void load (const char * __fileName)
    00078   {
    00079
    00080     std :: ifstream f (__fileName) ;
    00081
    00082     std :: cout << ">> Loading [" << __fileName << "]" << std :: endl ;
    00083
    00084     if (f)
    00085       {
    00086         unsigned int num_vert ;
    00087
    00088         f >> num_vert ;
    00089         vectCoord.resize (num_vert) ;
    00090
    00091         for (unsigned int i = 0 ; i < num_vert ; i ++)
    00092           {
    00093             f >> vectCoord [i].first >> vectCoord [i].second ;
    00094           }
    00095
    00096         f.close () ;
    00097
    00098         computeDistances () ;
    00099       }
    00100     else
    00101       {
    00102
    00103         std :: cout << __fileName << " doesn't exist !!!" << std :: endl ;
    00104         // Bye !!!
    00105         exit (1) ;
    00106       }
    00107   }
    00108
    00109   float distance (unsigned int __from, unsigned int __to)
    00110   {
    00111     return (float)(dist [__from] [__to]) ;
    00112   }
    00113 }
    00114
    00115