Aglo Dijkstra en Java

Résolu
aubej27 - 18 juin 2013 à 13:50
 aubej27 - 18 juin 2013 à 14:36
Bonjour,

Je suis novice et débutant en java et j'essaye de développer pour un TP de cours, l'algo de dijkstra.

Voici le début de mon code mais je galère un peu, car ce dernier ne vas pas plus loin que le résultat de la 1° itération.
Quelqu'un pourrait-il me venir en aide ? Merci d'avance pour vos contributions....

voici le code:


public class Dijkstra {
//private static Double INFINITY = Double.MAX_VALUE;
/**
* @param args
*/

public static void main(String[] args) {

// TODO Auto-generated method stub

int INFINITY = Integer.MAX_VALUE;

// je définie en premier, la matrice initiale
int [][] mat = {{0,3,1, INFINITY, INFINITY},{INFINITY, 0, INFINITY, 2, 4}, {INFINITY, 1, 0, 2, INFINITY}, {INFINITY, INFINITY, INFINITY, 0, 3}, {2, INFINITY, INFINITY, INFINITY, 0}};

int i,j,k;
int pos_min = 0;
int vec = 0;
int [] tab = mat[vec];
int [] tab_temp = new int [5];


int min = 99999;



for (i=0; i<tab.length; i++){

if (tab[i]==0) {tab[i]=-1;} // on passe à "-1" les valeurs nulles se trouvant dans le tableau tab
if ((min > tab[i]) && (tab[i] != -1)) // On recherche la valeur minimum dans le tableau ainsi que sa position
{min = tab[i];
pos_min = i;}

for (j=0; j<tab_temp.length; j++){
tab_temp [j] = tab[j];
if (j == pos_min ){tab_temp[j]= -1;} //on passe à "-1" la valeur minimum trouvée précédement
if (tab_temp[j] != -1){ //on applique Dijkstra
tab_temp[j] = Math.min(tab_temp[j], (tab[pos_min] + mat[pos_min][j]));
}
}
}

for (int x: tab_temp )
System.out.print(x+ " ");
System.out.println();


}
}

4 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
18 juin 2013 à 13:55
Salut,

Quel est ton problème ?
3
bonjour,

bah déja je voudrais savoir si le début parait correct; et puis si il y a moyen de boucler pour que les Itérations suivantes se déroulent.

Cdt
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
18 juin 2013 à 14:18
Je n'exécute pas ton code, et d'ailleurs personne ne le fera, alors, il faut que tu sois plus précis.

Ca a l'air correct au niveau de la syntaxe sauf
for (int x: tab_temp )

Cette écriture n'est possible que sur des objets
for (Integer x: tab_temp )
3
je vais essayer de résumer;

j'obtiens un tableau tab_temp avec des valeurs que je voudrais reprendre et exécuter de nouveau le code au dessus pour trouver le nouveau minimum et appliquer la suite du code.
La boucle devra s'arréter une fois que tous les minimums seront passer à -1
3
Rejoignez-nous