Graphes/TP/ClassesDeDepart/Graphe.java

126 lines
2.5 KiB
Java
Raw Permalink Normal View History

2024-02-28 12:00:20 +01:00
/**
2024-02-29 10:44:39 +01:00
* Classe definissant des graphes au sens mathematiques
2024-02-28 12:00:20 +01:00
* @author Luc Dartois
* @version 1.0
*/
public class Graphe{
/**
2024-02-29 10:44:39 +01:00
* Le nombre de sommets du graphe, numerotes de 0 a ordre-1
2024-02-28 12:00:20 +01:00
*/
private int ordre;
/**
2024-02-29 10:44:39 +01:00
* Ses aretes donnees sous forme de matrice carre d'adjacence (voir classe MatriceCarre)
2024-02-28 12:00:20 +01:00
*/
private MatriceCarre adj;
/**
2024-02-29 10:44:39 +01:00
* Indique si le graphe est oriente ou non
2024-02-28 12:00:20 +01:00
*/
private boolean oriente;
/**
* Construit un graphe vide
*@param ord indique l'ordre du graphe
2024-02-29 10:44:39 +01:00
*@param o indique s'il est oriente
2024-02-28 12:00:20 +01:00
*/
public Graphe(int ord,boolean o){
this.ordre=ord;
this.adj=new MatriceCarre(ord);
this.oriente=o;
}
/**
* Getter pour l'ordre
*@return L'ordre du graphe
*/
public int getOrdre(){
return this.ordre;
}
/**
2024-02-29 10:44:39 +01:00
* Renvoit vrai s'il y a une arete de i a j
2024-02-28 12:00:20 +01:00
*@param i,j Deux sommets du graphe
2024-02-29 10:44:39 +01:00
*@return Vrai si le graphe possède une arete de i a j
2024-02-28 12:00:20 +01:00
*/
public boolean getArete(int i,int j){
return this.adj.getCoeff(i,j)==1;
}
/**
2024-02-29 10:44:39 +01:00
* Ajoute une arete de i a j
2024-02-28 12:00:20 +01:00
*@param i,j Deux sommets du graphe
*/
public void ajoutArete(int i,int j){
if(i>=this.ordre||j>=this.ordre||i<0||j<0){
throw new IllegalArgumentException("Erreur : Sommet inexistant.");
}
this.adj.setCoeff(i,j,1);
if(!this.oriente){
this.adj.setCoeff(j,i,1);
}
}
/**
* Affiche la liste des voisins de i
*@param i Un sommet du graphe
*/
public void voisinage(int i){
if(!this.oriente){
System.out.print("Voisins de "+i+" : ");
for(int j=0;j<this.ordre;j++){
if(this.adj.getCoeff(i,j)==1){
System.out.print(j+", ");
}
}
System.out.println();
}
else{
System.out.print("Voisins sortants de "+i+" : ");
for(int j=0;j<this.ordre;j++){
if(this.adj.getCoeff(i,j)==1){
System.out.print(j+", ");
}
}
System.out.println();
System.out.print("Voisins entrants de "+i+" : ");
for(int j=0;j<this.ordre;j++){
if(this.adj.getCoeff(j,i)==1){
System.out.print(j+", ");
}
}
System.out.println();
}
}
/**
* Calcule la somme du nombre de voisins de tous les sommets
2024-02-29 10:44:39 +01:00
*@return Un entier representant la somme de tous les voisins.
2024-02-28 12:00:20 +01:00
*/
public int sommeVoisins(){
int s=0;
for(int i=0;i<this.ordre;i++){
for(int j=0;j<this.ordre;j++){
s+=this.adj.getCoeff(i,j);
}
}
return s;
}
public String toString(){
String s="Graphe ";
if(!this.oriente){
s+="non ";
}
s+="oriente de taille : "+this.ordre+".\n";
return s;
}
public boolean equals(Graphe g){
if(this.ordre!=g.ordre)
return false;
if(this.oriente!=g.oriente)
return false;
if(!this.adj.equals(g.adj))
return false;
return true;
}
}