SHARE
TWEET

Untitled

a guest Oct 12th, 2017 47 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. % taille = 4;
  2. % connus = [1,2,2; 1,3,4; 2,4,2; 3,1,3; 4,2,1; 4,3,3];
  3.  
  4. taille = 9;
  5. connus = [1,2,2;
  6.     1,5,3;
  7.     1,8,4;
  8.     2,1,6;
  9.     2,9,3;
  10.     3,3,4;
  11.     3,7,5;
  12.     4,4,8;
  13.     4,6,6;
  14.     5,1,8;
  15.     5,5,1;
  16.     5,9,6;
  17.     6,4,7;
  18.     6,6,5;
  19.     7,3,7;
  20.     7,7,6;
  21.     8,1,4;
  22.     8,9,8;
  23.     9,2,3;
  24.     9,5,4;
  25.     9,8,2];
  26.  
  27. nbvariables = taille^3;
  28. nbconditions = (taille^(2))*4+length(connus);
  29.  
  30. Aeq = zeros(nbconditions,nbvariables);
  31. beq = ones(nbconditions,1);
  32.  
  33. condrow = 1;
  34. % =========== lignes ===========
  35. for i = 1:taille
  36.     for k = 1:taille
  37.         for j = 1:taille
  38.             Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  39.         end
  40.         condrow = condrow + 1;
  41.     end
  42. end
  43. % =========== colonnes ===========
  44. for k = 1:taille
  45.     for j = 1:taille
  46.         for i = 1:taille
  47.             Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  48.         end
  49.         condrow = condrow + 1;
  50.     end
  51. end
  52. % =========== carrés ===========
  53. for k = 1:taille
  54.     n = sqrt(taille);
  55.     for u = 0:n-1
  56.         p = u*n+1;
  57.         for v = 0:n-1
  58.             q = v*n+1;
  59.             for i = p:p+n-1
  60.                 for j = q:q+n-1
  61.                     Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  62.                 end
  63.             end
  64.             condrow = condrow + 1;
  65.         end
  66.     end
  67. end
  68.  
  69. % unicité chiffres
  70. for i = 1:taille
  71.     for j = 1:taille
  72.         for k = 1:taille
  73.             Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  74.         end
  75.         condrow = condrow + 1;
  76.     end
  77. end
  78.  
  79. % Nombres connus
  80. for n = 1:size(connus)
  81.     i = connus(n,1);
  82.     j = connus(n,2);
  83.     k = connus(n,3);
  84.     Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  85.     condrow = condrow + 1;
  86. end
  87.  
  88. % matrice
  89. lb = zeros(nbvariables,1);
  90. ub = ones(nbvariables,1);
  91.  
  92. f = zeros(nbvariables,1);
  93. intcon = nbvariables;
  94.  
  95. A = [];
  96. B = [];
  97.  
  98. x = intlinprog(f,intcon,A,B,Aeq,beq,lb,ub);
  99.  
  100. grid = zeros(taille);
  101.  
  102. for i = 1:taille
  103.     for j = 1:taille
  104.         for k = 1:taille
  105.             index = (i-1)*taille*taille + (j-1)*taille + k;
  106.             if int8(x(index)) == 1
  107.                 grid(i,j) = k;
  108.                 break
  109.             end
  110.         end
  111.     end
  112. end
  113.  
  114. grid
RAW Paste Data
Top