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
   |  
public void gauss(){ 
 
int libre = 0;
for(int c = 0 ; c < matrice.length ; c++){
    int pivot = getPivot(c,libre);
    if( pivot == -1){
    continue;
    }
    swapDouble(pivot,libre);
    swapSimple(pivot,libre);
 
    for(int r = libre+1 ; r < matrice.length; r++){
    if(matrice[r][c] !=0){
        for(int l = c ; l<matrice.length ; l++){
        matrice[r][l] = (matrice[r][l]+matrice[libre][l])%this.nbEtat;
        }
        conf[r] = (conf[r]+conf[libre])%this.nbEtat;
    }
    }
    libre++;
}   
}
 
public void swapDouble ( int i , int j){  
 
for(int k = 0 ; k < matrice.length ; k++){
    int tmp = matrice[i][k];
    matrice[i][k] = matrice[j][k];
    matrice[j][k] = tmp;
}
} 
 
public void swapSimple( int i, int j){ 
int tmp = conf[i];
conf[i] = conf[j];
conf[j] = tmp;
}
 
public int[] substitution() throws Exception{   
 
int [] sol = new int [matrice.length];
for(int i = 0 ; i <sol.length ; i++){
    sol[i]= 0;
}
 
for(int ligne = matrice.length-1; ligne >= 0 ; ligne--){ 
    int pivot = -1;
 
    for(int col = 0; col < matrice.length ; col++){
    if(matrice[ligne][col] != 0){
        pivot = col;
        break;
    }
    }
 
    if(pivot == -1 && conf[ligne] != 0){
    throw new Exception();
    }
    else{
    sol[ligne] = conf[ligne];
    for(int p = pivot ; p < matrice.length ; p++){
        sol[ligne] = (sol[ligne]+ matrice[ligne][p])%this.nbEtat;
    }
    }
 
}
 
return sol;
}
 
public int getPivot(int colonne , int depart){  
for( int i = depart; i < matrice.length ; i++){
    if(matrice[i][colonne] == 1){
    return i;
    }
}
return -1; 
} | 
Partager