Advertisement
Guest User

Untitled

a guest
Dec 18th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.75 KB | None | 0 0
  1. /**
  2.  * labynombre - Test.java
  3.  * Author : Jonathan Schnyder
  4.  * Created : 18 déc. 2017
  5.  */
  6.  
  7. package labynombre;
  8.  
  9. import java.util.ArrayList;
  10.  
  11. public class Test
  12. {
  13.     public static int[][] matrix = new int[20][20] ;
  14.    
  15.     public static int[][] mouvements = {
  16.             //mouv. ligne[0],   mouv. col[1],   nombre à ajouter[2]
  17.             {+0,                +1,             +2},                //droige [0]
  18.             {+0,                -1,             -4},                //gauche [1]
  19.             {-1,                +0,             -5},                //haut   [2]
  20.             {+1,                +0,             +3},                //bas    [3]
  21.     };
  22.    
  23.     //initialisation
  24.     public static int ligneActuelle = 0;
  25.     public static int colonneActuelle = 6; 
  26.     public static int valeurActuelle = 4;
  27.    
  28.     public static int nbSolutions = 0 ;
  29.    
  30.     //liste des mouvements effectués
  31.     public static ArrayList listeMouvement = new ArrayList() ;
  32.    
  33.     //méthode de backtracking
  34.     public static void resoudreLabynombre()
  35.     {
  36.         //clause de finitude
  37.         if((ligneActuelle==13&&colonneActuelle==0)||(ligneActuelle==13&&colonneActuelle==19)||(ligneActuelle==19&&colonneActuelle==9))
  38.         {
  39.             nbSolutions++ ;
  40.             System.out.println("Solution "+nbSolutions);
  41.             affiche() ;
  42.             return ;
  43.         }
  44.        
  45.         //pas récursif
  46.         //pour chaque mouvement à partir de la case actuelle
  47.         for (int i = 0; i < mouvements.length; i++)
  48.         {
  49.             if(mouvementPossible(i))
  50.             {          
  51.                 effectuerMouvement(i, 1) ;
  52.                 resoudreLabynombre() ;
  53.                 effectuerMouvement(i, -1) ;
  54.             }
  55.         }
  56.     }
  57.    
  58.     //methode pour effectuer et enregistrer le mouvement
  59.     //opérateur = 1 si on effectue le mouvement, -1 si on l'annule
  60.     public static void effectuerMouvement(int mouvement, int operateur)
  61.     {  
  62.         //définit les mouvements
  63.         int mouvementLigne = mouvements[mouvement][0] * operateur ;
  64.         int mouvementColonne = mouvements[mouvement][1] * operateur ;
  65.         int mouvementValeur = mouvements[mouvement][2] * operateur ;
  66.        
  67.         //si on annule le mouvement, on le retire de la liste
  68.         if(operateur==-1)
  69.         {
  70.             listeMouvement.remove(listeMouvement.size()-1) ;
  71.         }
  72.         //sinon on l'ajoute
  73.         else
  74.         {
  75.             String direction = null;
  76.             switch(mouvement)
  77.             {
  78.            
  79.             case 0 :
  80.                 direction = ">" ;
  81.                 break;
  82.             case 1 :
  83.                 direction = "<" ;
  84.                 break;
  85.             case 2 :
  86.                 direction = "^" ;
  87.                 break ;
  88.             case 3 :
  89.                 direction = "v" ;
  90.                 break ;
  91.             }
  92.             listeMouvement.add(direction) ;
  93.         }
  94.        
  95.         //on effectue le mouvement
  96.         valeurActuelle += mouvementValeur ;            
  97.         ligneActuelle += mouvementLigne ;
  98.         colonneActuelle += mouvementColonne ;              
  99.     }
  100.    
  101.     //methode qui teste si le mouvement est possible
  102.     public static boolean mouvementPossible(int mouvement)
  103.     {
  104.         //définit les valeurs obtenues par le mouvement
  105.         int ligneSuivante = ligneActuelle+mouvements[mouvement][0] ;
  106.         int colonneSuivante = colonneActuelle+mouvements[mouvement][1] ;
  107.         int valeurSuivante = valeurActuelle+mouvements[mouvement][2] ;
  108.        
  109.         //si on sort du tableau (lignes)
  110.         if(ligneSuivante==-1||ligneSuivante==20) return false ;
  111.        
  112.         //si on sort du tableau (colonnes)
  113.         if(colonneSuivante==-1||colonneSuivante==20) return false ;
  114.        
  115.         //si on tombe sur une case en dehors des valeurs
  116.         if(matrix[ligneSuivante][colonneSuivante]==-1) return false ;
  117.        
  118.         //si l'addition de la valeur du mouvement ne correspond pas à la valeur de la case
  119.         if(matrix[ligneSuivante][colonneSuivante]!=valeurSuivante) return false ;
  120.        
  121.         return true ;
  122.     }
  123.    
  124.     //duh
  125.     public static void affiche()
  126.     {
  127.         for (int i = 0; i < listeMouvement.size(); i++)
  128.         {
  129.             System.out.print(listeMouvement.get(i)+" ");
  130.         }  
  131.         System.out.println();
  132.     }
  133.    
  134.     //re-duh
  135.     public static void main(String[] args)
  136.     {
  137.        
  138.         fillMatrix();
  139.         resoudreLabynombre();
  140.     }  
  141.  
  142.     //methode qui remplit la matrice avec le labyrithe
  143.     public static void fillMatrix() {
  144.         // Remplissage avec une valeur -1
  145.         for (int i = 0; i < matrix.length; i++) {
  146.             for (int j = 0; j < matrix.length; j++) {
  147.                 matrix[i][j] = -1;
  148.             }
  149.         }
  150.  
  151.         // Remplissage avec les bonnes valeurs
  152.         matrix[0][6] = 4;
  153.         matrix[1][5] = 1;
  154.         matrix[1][6] = 7;
  155.         matrix[1][7] = 9;
  156.         matrix[2][3] = 3;
  157.         matrix[2][4] = 2;
  158.         matrix[2][5] = 6;
  159.         matrix[2][6] = 10;
  160.         matrix[2][7] = 12;
  161.         matrix[2][8] = 14;
  162.         matrix[2][9] = 16;
  163.         matrix[2][10] = 4;
  164.         matrix[2][11] = 8;
  165.         matrix[2][12] = 10;
  166.         matrix[2][13] = 12;
  167.         // 3
  168.         matrix[3][2] = 4;
  169.         matrix[3][3] = 1;
  170.         matrix[3][4] = 5;
  171.         matrix[3][5] = 9;
  172.         matrix[3][6] = 11;
  173.         matrix[3][7] = 13;
  174.         matrix[3][8] = 15;
  175.         matrix[3][9] = 19;
  176.         matrix[3][10] = 21;
  177.         matrix[3][11] = 13;
  178.         matrix[3][12] = 15;
  179.         matrix[3][13] = 2;
  180.         matrix[3][14] = 5;
  181.         // 4
  182.         matrix[4][2] = 5;
  183.         matrix[4][3] = 4;
  184.         matrix[4][4] = 8;
  185.         matrix[4][5] = 12;
  186.         matrix[4][6] = 12;
  187.         matrix[4][7] = 16;
  188.         matrix[4][8] = 14;
  189.         matrix[4][9] = 16;
  190.         matrix[4][10] = 16;
  191.         matrix[4][11] = 18;
  192.         matrix[4][12] = 4;
  193.         matrix[4][13] = 7;
  194.         matrix[4][14] = 10;
  195.         matrix[4][15] = 12;
  196.         // 5
  197.         matrix[5][2] = 2;
  198.         matrix[5][3] = 7;
  199.         matrix[5][4] = 7;
  200.         matrix[5][5] = 11;
  201.         matrix[5][6] = 15;
  202.         matrix[5][7] = 17;
  203.         matrix[5][8] = 19;
  204.         matrix[5][9] = 19;
  205.         matrix[5][10] = 21;
  206.         matrix[5][11] = 23;
  207.         matrix[5][12] = 9;
  208.         matrix[5][13] = 13;
  209.         matrix[5][14] = 15;
  210.         matrix[5][15] = 2;
  211.         matrix[5][16] = 5;
  212.         // 6
  213.         matrix[6][2] = 6;
  214.         matrix[6][3] = 2;
  215.         matrix[6][4] = 10;
  216.         matrix[6][5] = 12;
  217.         matrix[6][6] = 10;
  218.         matrix[6][7] = 14;
  219.         matrix[6][8] = 18;
  220.         matrix[6][9] = 22;
  221.         matrix[6][10] = 24;
  222.         matrix[6][11] = 26;
  223.         matrix[6][12] = 14;
  224.         matrix[6][13] = 18;
  225.         matrix[6][14] = 18;
  226.         matrix[6][15] = 20;
  227.         matrix[6][16] = 22;
  228.         matrix[6][17] = 24;
  229.         // 7
  230.         matrix[7][2] = 9;
  231.         matrix[7][3] = 8;
  232.         matrix[7][4] = 13;
  233.         matrix[7][5] = 15;
  234.         matrix[7][6] = 13;
  235.         matrix[7][7] = 11;
  236.         matrix[7][8] = 15;
  237.         matrix[7][9] = 17;
  238.         matrix[7][10] = 27;
  239.         matrix[7][11] = 19;
  240.         matrix[7][12] = 21;
  241.         matrix[7][13] = 23;
  242.         matrix[7][14] = 19;
  243.         matrix[7][15] = 23;
  244.         matrix[7][16] = 23;
  245.         matrix[7][17] = 27;
  246.         // 8
  247.         matrix[8][2] = 12;
  248.         matrix[8][3] = 11;
  249.         matrix[8][4] = 11;
  250.         matrix[8][5] = 12;
  251.         matrix[8][6] = 16;
  252.         matrix[8][7] = 18;
  253.         matrix[8][8] = 20;
  254.         matrix[8][9] = 20;
  255.         matrix[8][10] = 22;
  256.         matrix[8][11] = 24;
  257.         matrix[8][12] = 24;
  258.         matrix[8][13] = 26;
  259.         matrix[8][14] = 22;
  260.         matrix[8][15] = 24;
  261.         matrix[8][16] = 26;
  262.         matrix[8][17] = 28;
  263.         // 9
  264.         matrix[9][2] = 15;
  265.         matrix[9][3] = 14;
  266.         matrix[9][4] = 16;
  267.         matrix[9][5] = 15;
  268.         matrix[9][6] = 17;
  269.         matrix[9][7] = 13;
  270.         matrix[9][8] = 17;
  271.         matrix[9][9] = 21;
  272.         matrix[9][10] = 25;
  273.         matrix[9][11] = 21;
  274.         matrix[9][12] = 25;
  275.         matrix[9][13] = 29;
  276.         matrix[9][14] = 25;
  277.         matrix[9][15] = 27;
  278.         matrix[9][16] = 27;
  279.         matrix[9][17] = 31;
  280.         // 10
  281.         matrix[10][2] = 18;
  282.         matrix[10][3] = 22;
  283.         matrix[10][4] = 14;
  284.         matrix[10][5] = 18;
  285.         matrix[10][6] = 12;
  286.         matrix[10][7] = 16;
  287.         matrix[10][8] = 2;
  288.         matrix[10][9] = 6;
  289.         matrix[10][10] = 10;
  290.         matrix[10][11] = 24;
  291.         matrix[10][12] = 20;
  292.         matrix[10][13] = 24;
  293.         matrix[10][14] = 28;
  294.         matrix[10][15] = 30;
  295.         matrix[10][16] = 2;
  296.         matrix[10][17] = 4;
  297.         // 11
  298.         matrix[11][2] = 21;
  299.         matrix[11][3] = 25;
  300.         matrix[11][4] = 25;
  301.         matrix[11][5] = 11;
  302.         matrix[11][6] = 15;
  303.         matrix[11][7] = 0;
  304.         matrix[11][8] = 3;
  305.         matrix[11][9] = 9;
  306.         matrix[11][10] = 15;
  307.         matrix[11][11] = 19;
  308.         matrix[11][12] = 23;
  309.         matrix[11][13] = 25;
  310.         matrix[11][14] = 3;
  311.         matrix[11][15] = 5;
  312.         matrix[11][16] = 7;
  313.         matrix[11][17] = 7;
  314.         // 12
  315.         matrix[12][1] = 20;
  316.         matrix[12][2] = 24;
  317.         matrix[12][3] = 28;
  318.         matrix[12][4] = 30;
  319.         matrix[12][5] = 32;
  320.         matrix[12][6] = 0;
  321.         matrix[12][7] = 4;
  322.         matrix[12][8] = 8;
  323.         matrix[12][9] = 12;
  324.         matrix[12][10] = 14;
  325.         matrix[12][11] = 16;
  326.         matrix[12][12] = 18;
  327.         matrix[12][13] = 4;
  328.         matrix[12][14] = 8;
  329.         matrix[12][15] = 12;
  330.         matrix[12][16] = 10;
  331.         matrix[12][17] = 12;
  332.         matrix[12][18] = 14;
  333.         // 13
  334.         matrix[13][0] = 19;
  335.         matrix[13][1] = 23;
  336.         matrix[13][2] = 25;
  337.         matrix[13][3] = 29;
  338.         matrix[13][4] = 33;
  339.         matrix[13][5] = 0;
  340.         matrix[13][6] = 3;
  341.         matrix[13][7] = 7;
  342.         matrix[13][8] = 11;
  343.         matrix[13][9] = 13;
  344.         matrix[13][10] = 17;
  345.         matrix[13][11] = 11;
  346.         matrix[13][12] = 13;
  347.         matrix[13][13] = 15;
  348.         matrix[13][14] = 13;
  349.         matrix[13][15] = 17;
  350.         matrix[13][16] = 19;
  351.         matrix[13][17] = 21;
  352.         matrix[13][18] = 17;
  353.         matrix[13][19] = 19;
  354.         // 14
  355.         matrix[14][1] = 26;
  356.         matrix[14][2] = 28;
  357.         matrix[14][3] = 30;
  358.         matrix[14][4] = 34;
  359.         matrix[14][5] = 2;
  360.         matrix[14][6] = 6;
  361.         matrix[14][7] = 10;
  362.         matrix[14][8] = 12;
  363.         matrix[14][9] = 16;
  364.         matrix[14][10] = 14;
  365.         matrix[14][11] = 16;
  366.         matrix[14][12] = 18;
  367.         matrix[14][13] = 20;
  368.         matrix[14][14] = 20;
  369.         matrix[14][15] = 22;
  370.         matrix[14][16] = 18;
  371.         matrix[14][17] = 20;
  372.         matrix[14][18] = 22;
  373.         // 15
  374.         matrix[15][2] = 29;
  375.         matrix[15][3] = 33;
  376.         matrix[15][4] = 1;
  377.         matrix[15][5] = 5;
  378.         matrix[15][6] = 7;
  379.         matrix[15][7] = 11;
  380.         matrix[15][8] = 15;
  381.         matrix[15][9] = 17;
  382.         matrix[15][10] = 19;
  383.         matrix[15][11] = 19;
  384.         matrix[15][12] = 19;
  385.         matrix[15][13] = 23;
  386.         matrix[15][14] = 25;
  387.         matrix[15][15] = 25;
  388.         matrix[15][16] = 23;
  389.         matrix[15][17] = 25;
  390.         // 16
  391.         matrix[16][2] = 32;
  392.         matrix[16][3] = 0;
  393.         matrix[16][4] = 4;
  394.         matrix[16][5] = 2;
  395.         matrix[16][6] = 4;
  396.         matrix[16][7] = 6;
  397.         matrix[16][8] = 18;
  398.         matrix[16][9] = 11;
  399.         matrix[16][10] = 13;
  400.         matrix[16][11] = 17;
  401.         matrix[16][12] = 22;
  402.         matrix[16][13] = 22;
  403.         matrix[16][14] = 28;
  404.         matrix[16][15] = 30;
  405.         matrix[16][16] = 28;
  406.         matrix[16][17] = 30;
  407.         // 17
  408.         matrix[17][3] = 3;
  409.         matrix[17][4] = 0;
  410.         matrix[17][5] = 3;
  411.         matrix[17][6] = 7;
  412.         matrix[17][7] = 9;
  413.         matrix[17][8] = 11;
  414.         matrix[17][9] = 13;
  415.         matrix[17][10] = 16;
  416.         matrix[17][11] = 21;
  417.         matrix[17][12] = 25;
  418.         matrix[17][13] = 27;
  419.         matrix[17][14] = 29;
  420.         matrix[17][15] = 33;
  421.         matrix[17][16] = 35;
  422.         // 18 et 19
  423.         matrix[18][8] = 14;
  424.         matrix[18][9] = 16;
  425.         matrix[18][10] = 20;
  426.         matrix[19][9] = 19;
  427.     }
  428. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement