package graphe; import java.util.*; import javax.swing.*; /** * Classe Graphe. * Classe contenant toutes les informations du graphe à colorer. * Le graphe est représenté par une matrice d'adjacence. * @author Estelle Colin, Thomas Peclier, Fabrice Berna @ IUP GMI * @see Sommet, Application * @version 1.0 */ public class Graphe { /*----------------------------- Variables -----------------------------*/ /** * Nombre de sommets du graphe */ private int nbSommets; /** * Probabilité de connexité (présence d'un arc) entre deux sommets */ private double lambda; /** * Matrice représentant le graphe */ private boolean[][] matrice; /** * Variable utilisée pour un tirage aléatoire des sommets */ private Random rand; /** * Canal d'écriture */ private JTextArea jTextArea1; /*----------------------------- Accesseurs -----------------------------*/ /** * Getter Nombre de sommets * @return int */ public final int getNbSommets() { return nbSommets; } /** * Getter d'une case de la matrice * @param int, colonne * @param int, ligne * @return int, valeur de la case */ public final boolean Mat(int i, int j) { return matrice[i][j]; } /** * Getter d'une colonne de la matrice, cad la liste des voisins d'un sommet * @param int, le numéro du sommet * @return boolean[], la liste des voisins du sommet */ public final boolean[] voisins(int i) { boolean[] vois = new boolean[nbSommets]; for (int j = 0; j < nbSommets; j++) vois[j] = matrice[i][j]; return vois; } /** * Setter du nombre de sommets */ public final void setNbSommets(int nb) { nbSommets = nb; matrice = new boolean[nbSommets][nbSommets]; } /** * Setter d'une case de la matrice */ public final void setSommet(int i, int j, int val) { if (val == 1) matrice[i][j] = true; else matrice[i][j] = false; } /*----------------------------- Méthodes -----------------------------*/ /** * Constructeur du Graphe. Génère la matrice de manière préétablie */ public Graphe(JTextArea j) { jTextArea1 = j; rand = new Random(); lambda = 0; } /** * Constructeur du Graphe. Génère la matrice de manière aléatoire en fonction de la probabilité * de connexité. * @param double, probabilité de connexité * @param int, nombre de sommets du graphe */ public Graphe(double p, int nbSom, JTextArea j) { jTextArea1 = j; rand = new Random(); lambda = p; nbSommets = nbSom; matrice = new boolean[nbSommets][nbSommets]; remplitMatrice(); } /** * Tirage uniforme de valeur 0 ou 1, de probabilité lamdba * @return boolean, si oui ou non on a un arc */ private final boolean tirage_discret() { if (rand.nextDouble() <= lambda) { return true; } return false; } /** * Affichage de la matrice représentant les arcs du graphe */ public final void afficheMatrice() { String affichage; affichage = " "; for (int i = 0; i < nbSommets; i++) { affichage += (i + " "); } affichage += "\n"; for (int i = 0; i < nbSommets; i++) { affichage += ("--"); } affichage += "\n"; for (int i = 0; i < nbSommets; i++) { if (i < 10) affichage += (" "); affichage += (i + "|"); for (int j = 0; j < nbSommets; j++) { if (matrice[i][j]) affichage += ("1 "); else affichage += ("0 "); } affichage += "\n"; } println(affichage); } /** * Initialisation de la matrice représentant le graphe */ private final void remplitMatrice() { for (int i = 0; i < nbSommets; i++) { for (int j = i + 1; j < nbSommets; j++) { matrice[i][j] = tirage_discret(); matrice[j][i] = matrice[i][j]; } } } /** * Fonction d'affichage */ private final void println(String s) { if (jTextArea1 != null) { jTextArea1.setText(jTextArea1.getText() + "\n" + s); } else { System.out.println(s); } } }