1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| //
// main.cpp
// Floyd_Warshall
//
#include <stdio.h>
#include <limits.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <time.h> /* clock_t, clock, CLOCKS_PER_SEC */
using namespace std; /* pour enlever std:: */
int main(int argc, const char * argv[])
{
// on a 13 relations
int n= 13;
// on définit un vecteur de vecteurs qui contient les relations
vector< vector<int> > vec(n, vector<int>(2));
// le noeud 8 est relié avec le noeud 6 dans les 2 sens et sans poids
vec[0]= {6, 8};
vec[1]= {13, 1};
vec[2]= {1, 12};
vec[3]= {0, 3};
vec[4]= {13, 11};
vec[5]= {9, 13};
vec[6]= {2, 5};
vec[7]= {12, 10};
vec[8]= {4, 9};
vec[9]= {7, 2};
vec[10]= {8, 7};
vec[11]= {3, 4};
vec[12]= {1, 6};
// 0--3--4--9--13--1--6--8--7--2--5
// ! !
// 11 12--10
// la taille de la matrice (noeud 0 à noeud 13)
int sizeArray = 14;
// 999999999 est l'infini
vector< vector<int> > graphe(sizeArray, vector<int>(sizeArray, 999999999));
// la diagonale est forcément à 0
for(int i=0; i < sizeArray; i++)
graphe[i][i]=0;
// on relit la liste de relation en les mettant dans le graphe
int perso1, perso2;
for (int i =0; i < n; i++) {
perso1 = vec[i][0];
perso2 = vec[i][1];
// le poids des liaisons est uniforme (tjs 1)
// la matrice est symétrique
graphe[perso1][perso2] = 1;
graphe[perso2][perso1] = 1;
}
// Floyd-Warshall
for(int k = 0; k < sizeArray; k++)
for(int i = 0; i < sizeArray; i++)
for(int j = 0; j < sizeArray; j++)
if(graphe[i][j]>graphe[i][k]+graphe[k][j])
graphe[i][j]=graphe[i][k]+graphe[k][j];
// Impression de la matrice finale
for(int i = 0; i < sizeArray; i++){
for(int j = 0; j < sizeArray; j++)
cout << graphe[i][j] << " ";
cout << endl;
}
// la matrice résultat
/*
0 5 9 1 2 10 6 8 7 3 7 5 6 4
5 0 4 4 3 5 1 3 2 2 2 2 1 1
9 4 0 8 7 1 3 1 2 6 6 6 5 5
1 4 8 0 1 9 5 7 6 2 6 4 5 3
2 3 7 1 0 8 4 6 5 1 5 3 4 2
10 5 1 9 8 0 4 2 3 7 7 7 6 6
6 1 3 5 4 4 0 2 1 3 3 3 2 2
8 3 1 7 6 2 2 0 1 5 5 5 4 4
7 2 2 6 5 3 1 1 0 4 4 4 3 3
3 2 6 2 1 7 3 5 4 0 4 2 3 1
7 2 6 6 5 7 3 5 4 4 0 4 1 3
5 2 6 4 3 7 3 5 4 2 4 0 3 1
6 1 5 5 4 6 2 4 3 3 1 3 0 2
4 1 5 3 2 6 2 4 3 1 3 1 2 0
*/
return 0;
} |
Partager