Prgmjava
Nouveau membre
Bonjour à tous !
J'ai créé un programme en java pour essayer de trouver une chaîne améliorante dans un réseau d'irrigation. Seulement, lorsque je teste mon programme et que je lui demande de me renvoyer la chaîne améliorante, il me renvoie l'ensemble vide et je n'arrive pas à savoir ce qui ne va pas dans mon programme. Pourriez-vous m'aider à trouver mon erreur ?
J'ai créé une classe ConnexionVille(int origine, int destination, int capacite, int debit). J'ai ensuite créé un tableau tel que à la ligne i je rentre les connexionVille de la ville i. Aussi, la ville 0 correspond à la ville de départ et la ville numéro nombreVilles-1 est la ville d'arrivée. J'ai créé une autre classe Canalisation(int origine, int destination, int capaciteRestante) (avec capaciteRestante=capacite-debit). Cette classe me permet ensuite de créer une ArrayList contenant les canalisations de la chaîne améliorante. Merci d'avance pour votre aide , j'espère que vous comprendrez mon code que voici :
J'ai créé un programme en java pour essayer de trouver une chaîne améliorante dans un réseau d'irrigation. Seulement, lorsque je teste mon programme et que je lui demande de me renvoyer la chaîne améliorante, il me renvoie l'ensemble vide et je n'arrive pas à savoir ce qui ne va pas dans mon programme. Pourriez-vous m'aider à trouver mon erreur ?
J'ai créé une classe ConnexionVille(int origine, int destination, int capacite, int debit). J'ai ensuite créé un tableau tel que à la ligne i je rentre les connexionVille de la ville i. Aussi, la ville 0 correspond à la ville de départ et la ville numéro nombreVilles-1 est la ville d'arrivée. J'ai créé une autre classe Canalisation(int origine, int destination, int capaciteRestante) (avec capaciteRestante=capacite-debit). Cette classe me permet ensuite de créer une ArrayList contenant les canalisations de la chaîne améliorante. Merci d'avance pour votre aide , j'espère que vous comprendrez mon code que voici :
Java:
import java.util.ArrayList;
public class Algorithme {
private ConnexionVille[][] cv; //tableau des connexions des villes
private boolean[] villesVisitees; //tableau permettant le marquage des villes traversées : si la ville i est traversée, villesVisitees[i]=true, sinon c'est false
private int nombreVilles; //nombre de villes du réseau donné
private ArrayList<Canalisation> itineraire; //liste des canalisations de la chaîne améliorante
//Constructeur
public Algorithme(ConnexionVille[][] cv, boolean[] villesVisitees, int nombreVilles){
this.cv=cv;
this.nombreVilles=nombreVilles;
this.villesVisitees=villesVisitees;
}
//méthode ChaineAmeliorante() permettant de trouver une chaîne améliorante
public ArrayList<Canalisation> ChaineAmeliorante(int nombreVilles){
int pointeur=0; //"pointeur" permet de localiser la ligne de cv que nous traitons. "pointeur" correspond donc aussi à la ville où nous sommes
itineraire=new ArrayList<Canalisation>(); //nous créons la liste qui donnera la chaîne améliorante
while (villesVisitees[nombreVilles-1]=false){ //nous cherchons une chaîne améliorante, elle s'arrête lorque l'on est arrivé à la ville que l'on souhaite irriguer qui est identifiée par le plus grand entier, soit nombreVilles-1
int origine=pointeur;
//cherchons la canalisation partant de la ville "pointeur" qui a la plus grande capacité restante
int max=0;
for(int i=0; i<cv[pointeur].length; i++){
int a=cv[pointeur][i].getCapacite()-cv[pointeur][i].getDebit();
if((max<a) && (villesVisitees[i]==false)){
max=a;
}
}
for(int i=0; i<cv[pointeur].length; i++){
if(max==cv[pointeur][i].getCapacite()-cv[pointeur][i].getDebit()){
pointeur=cv[pointeur][i].getDestination();
villesVisitees[pointeur]=true;
Canalisation e=new Canalisation(origine, pointeur, max); //e est une canalisation de la chaîne améliorante
itineraire.add(e);
}
}
}
return itineraire;
}
//Méthode Flot() calculant le flot de la chaîne améliorante
public int Flot(){
//initialisons le flot par 0
int flot=0;
for(int i=0; i<itineraire.size(); i++){
if (itineraire.get(i).getCapaciteRestante()>flot){
flot=itineraire.get(i).getCapaciteRestante();
}
}
return flot;
}
//Méthode sendDebit() permettant d'envoyer du débit dans la chaîne améliorante trouvée
public void sendDebit(){
int colonne=0;
for (int i=0; i<itineraire.size(); i++){
int origine=itineraire.get(i).getOrigine();
for (int j=0; j<nombreVilles-1; j++){ //cherchons la colonne où est rangée la canalisation dans cv
if(itineraire.get(i).getDestination()==cv[origine][j].getDestination()){
colonne=j;
}
}
cv[origine][colonne].setDebit(Flot());
}
}
public ArrayList<Canalisation> getChaineAmeliorante(){
return itineraire;
}
public int getFlot(){
return Flot();
}
}