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 

Generated on Mon Oct 8 09:55:33 2007 for ParadisEO-MOMovingObjects by  doxygen 1.4.7