<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Spichenot</id>
	<title>Wiki du LAMA (UMR 5127) - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Spichenot"/>
	<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php/Sp%C3%A9cial:Contributions/Spichenot"/>
	<updated>2026-04-16T01:21:56Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12402</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12402"/>
		<updated>2020-05-17T10:01:45Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
[[Fichier:sudoku.png]]&lt;br /&gt;
&lt;br /&gt;
Durant ce projet j&#039;ai réalisé 2 programme qui permettent de résoudre des sudoku avec du backtracking.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. Il lui fait prendre les valeur de 1 à 9. Si la valeur de cette case est juste il passe à la case suivante sinon il revient à la case précédente.&lt;br /&gt;
&lt;br /&gt;
Cette méthode fonctionne mais l&#039;algorithme fait environ 5000 backtracking pour des grilles de niveau facile. Cela vient du fait que le programme ne peut pas savoir que la branche qu&#039;il explore est juste ou fausse tant qu&#039;il n&#039;est pas arrivé au bout.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;algorithme voir algorithme python, sudoku basique&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
Ce deuxième algorithme ressemble au premier, sauf que celui ci commence par enlever toutes les branches de l&#039;arbre qui ne sont pas des solutions. Pour cela le programme regarde les valeurs possibles pour chaque case et donc élimine toutes les valeurs impossible. De ce fait l’algorithme parcours moins de branche de l&#039;arbre ce qui diminue le nombre de backtracking. Par exemple pour une grille de niveau difficile le programme fait environ 5 backtracking. il peut ne même pas en faire sur des grilles assez simple.&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
Voici les algorithme que j&#039;ai fait durant le projet.&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in range(1,10): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def location_possiblity(arr,row,col):&lt;br /&gt;
    possibility = []&lt;br /&gt;
    for i in range(1,10):&lt;br /&gt;
        if not(used_in_row(arr,row,i)) and not(used_in_col(arr,col,i)) and not(used_in_box(arr,row - row%3,col - col%3,i)):&lt;br /&gt;
            possibility += [i]&lt;br /&gt;
    return possibility   &lt;br /&gt;
    &lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in location_possiblity(arr,row,col): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12400</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12400"/>
		<updated>2020-05-17T09:54:19Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : /* Algorithme basique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
[[Fichier:sudoku.png]]&lt;br /&gt;
&lt;br /&gt;
Le Backtracking fonctionne bien pour les résolutions de casse tête comme le sudoku. Car on peut facilement tester les cases une par une avec a chaque fois les valeurs entre 1 et 9.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. Il lui fait prendre les valeur de 1 à 9. Si la valeur de cette case est juste il passe à la case suivante sinon il revient à la case précédente.&lt;br /&gt;
&lt;br /&gt;
Cette méthode fonctionne mais l&#039;algorithme fait environ 5000 backtracking pour des grilles de niveau facile. Cela vient du fait que le programme ne peut pas savoir que la branche qu&#039;il explore est juste ou fausse tant qu&#039;il n&#039;est pas arrivé au bout.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;algorithme voir algorithme python, sudoku basique&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
Voici les algorithme que j&#039;ai fait durant le projet.&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in range(1,10): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def location_possiblity(arr,row,col):&lt;br /&gt;
    possibility = []&lt;br /&gt;
    for i in range(1,10):&lt;br /&gt;
        if not(used_in_row(arr,row,i)) and not(used_in_col(arr,col,i)) and not(used_in_box(arr,row - row%3,col - col%3,i)):&lt;br /&gt;
            possibility += [i]&lt;br /&gt;
    return possibility   &lt;br /&gt;
    &lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in location_possiblity(arr,row,col): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12399</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12399"/>
		<updated>2020-05-17T09:52:41Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : /* Algorithme python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
[[Fichier:sudoku.png]]&lt;br /&gt;
&lt;br /&gt;
Le Backtracking fonctionne bien pour les résolutions de casse tête comme le sudoku. Car on peut facilement tester les cases une par une avec a chaque fois les valeurs entre 1 et 9.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. Il lui fait prendre les valeur de 1 à 9. Si la valeur de cette case est juste il passe à la case suivante sinon il revient à la case précédente.&lt;br /&gt;
&lt;br /&gt;
Cette méthode fonctionne mais l&#039;algorithme fait environ 5000 backtracking pour des grilles de niveau facile. Cela vient du fait que le programme ne peut pas savoir que la branche qu&#039;il explore est juste ou fausse tant qu&#039;il n&#039;est pas arrivé au bout.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
Voici les algorithme que j&#039;ai fait durant le projet.&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in range(1,10): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def location_possiblity(arr,row,col):&lt;br /&gt;
    possibility = []&lt;br /&gt;
    for i in range(1,10):&lt;br /&gt;
        if not(used_in_row(arr,row,i)) and not(used_in_col(arr,col,i)) and not(used_in_box(arr,row - row%3,col - col%3,i)):&lt;br /&gt;
            possibility += [i]&lt;br /&gt;
    return possibility   &lt;br /&gt;
    &lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in location_possiblity(arr,row,col): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12398</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12398"/>
		<updated>2020-05-17T09:51:45Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
[[Fichier:sudoku.png]]&lt;br /&gt;
&lt;br /&gt;
Le Backtracking fonctionne bien pour les résolutions de casse tête comme le sudoku. Car on peut facilement tester les cases une par une avec a chaque fois les valeurs entre 1 et 9.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. Il lui fait prendre les valeur de 1 à 9. Si la valeur de cette case est juste il passe à la case suivante sinon il revient à la case précédente.&lt;br /&gt;
&lt;br /&gt;
Cette méthode fonctionne mais l&#039;algorithme fait environ 5000 backtracking pour des grilles de niveau facile. Cela vient du fait que le programme ne peut pas savoir que la branche qu&#039;il explore est juste ou fausse tant qu&#039;il n&#039;est pas arrivé au bout.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in range(1,10): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def location_possiblity(arr,row,col):&lt;br /&gt;
    possibility = []&lt;br /&gt;
    for i in range(1,10):&lt;br /&gt;
        if not(used_in_row(arr,row,i)) and not(used_in_col(arr,col,i)) and not(used_in_box(arr,row - row%3,col - col%3,i)):&lt;br /&gt;
            possibility += [i]&lt;br /&gt;
    return possibility   &lt;br /&gt;
    &lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in location_possiblity(arr,row,col): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12397</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12397"/>
		<updated>2020-05-17T09:42:30Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
[[Fichier:sudoku.png]]&lt;br /&gt;
&lt;br /&gt;
Le Backtracking fonctionne bien pour les résolutions de casse tête comme le sudoku. Car on peut facilement tester les cases une par une avec a chaque fois les valeurs entre 1 et 9.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
[[Sudoku basique]]&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. &lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in range(1,10): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def location_possiblity(arr,row,col):&lt;br /&gt;
    possibility = []&lt;br /&gt;
    for i in range(1,10):&lt;br /&gt;
        if not(used_in_row(arr,row,i)) and not(used_in_col(arr,col,i)) and not(used_in_box(arr,row - row%3,col - col%3,i)):&lt;br /&gt;
            possibility += [i]&lt;br /&gt;
    return possibility   &lt;br /&gt;
    &lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in location_possiblity(arr,row,col): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12396</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12396"/>
		<updated>2020-05-17T09:41:47Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : /* Résolution de sudoku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
[[Fichier:sudoku.png]]&lt;br /&gt;
&lt;br /&gt;
Le Backtracking fonctionne bien pour les résolutions de casse tête comme le sudoku. Car on peut facilement tester les cases une par une avec a chaque fois les valeurs entre 1 et 9.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. &lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in range(1,10): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def location_possiblity(arr,row,col):&lt;br /&gt;
    possibility = []&lt;br /&gt;
    for i in range(1,10):&lt;br /&gt;
        if not(used_in_row(arr,row,i)) and not(used_in_col(arr,col,i)) and not(used_in_box(arr,row - row%3,col - col%3,i)):&lt;br /&gt;
            possibility += [i]&lt;br /&gt;
    return possibility   &lt;br /&gt;
    &lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in location_possiblity(arr,row,col): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12395</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12395"/>
		<updated>2020-05-17T09:40:00Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : /* Résolution de sudoku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
[[Fichier:sudoku.png]]&lt;br /&gt;
&lt;br /&gt;
Le Backtracking fonctionne bien pour les résolutions de casse tête comme le sudoku.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. &lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in range(1,10): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def location_possiblity(arr,row,col):&lt;br /&gt;
    possibility = []&lt;br /&gt;
    for i in range(1,10):&lt;br /&gt;
        if not(used_in_row(arr,row,i)) and not(used_in_col(arr,col,i)) and not(used_in_box(arr,row - row%3,col - col%3,i)):&lt;br /&gt;
            possibility += [i]&lt;br /&gt;
    return possibility   &lt;br /&gt;
    &lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in location_possiblity(arr,row,col): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Sudoku.png&amp;diff=12394</id>
		<title>Fichier:Sudoku.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Sudoku.png&amp;diff=12394"/>
		<updated>2020-05-17T09:39:36Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12393</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12393"/>
		<updated>2020-05-17T09:39:08Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : /* Résolution de sudoku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
[[Fichier:sudoku.png]]&lt;br /&gt;
Le Backtracking fonctionne bien pour les résolutions de casse tête comme le sudoku.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. &lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in range(1,10): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def location_possiblity(arr,row,col):&lt;br /&gt;
    possibility = []&lt;br /&gt;
    for i in range(1,10):&lt;br /&gt;
        if not(used_in_row(arr,row,i)) and not(used_in_col(arr,col,i)) and not(used_in_box(arr,row - row%3,col - col%3,i)):&lt;br /&gt;
            possibility += [i]&lt;br /&gt;
    return possibility   &lt;br /&gt;
    &lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in location_possiblity(arr,row,col): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12368</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12368"/>
		<updated>2020-05-16T09:25:39Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
&lt;br /&gt;
Le Backtracking fonctionne bien pour les résolutions de casse tête comme le sudoku.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. &lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in range(1,10): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def location_possiblity(arr,row,col):&lt;br /&gt;
    possibility = []&lt;br /&gt;
    for i in range(1,10):&lt;br /&gt;
        if not(used_in_row(arr,row,i)) and not(used_in_col(arr,col,i)) and not(used_in_box(arr,row - row%3,col - col%3,i)):&lt;br /&gt;
            possibility += [i]&lt;br /&gt;
    return possibility   &lt;br /&gt;
    &lt;br /&gt;
# affiche la grille&lt;br /&gt;
def print_grid(arr):&lt;br /&gt;
    affiche=&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        for j in range(9): &lt;br /&gt;
            affiche+=str(arr[i][j])&lt;br /&gt;
        affiche+=&#039;\n&#039;&lt;br /&gt;
    print(affiche)&lt;br /&gt;
  &lt;br /&gt;
# trouver zone vide       &lt;br /&gt;
def find_empty_location(arr,l): &lt;br /&gt;
    for row in range(9): &lt;br /&gt;
        for col in range(9): &lt;br /&gt;
            if(arr[row][col]==0): &lt;br /&gt;
                l[0]=row &lt;br /&gt;
                l[1]=col &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier ligne&lt;br /&gt;
def used_in_row(arr,row,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[row][i] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier colonne&lt;br /&gt;
def used_in_col(arr,col,num): &lt;br /&gt;
    for i in range(9): &lt;br /&gt;
        if(arr[i][col] == num): &lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifier carré&lt;br /&gt;
def used_in_box(arr,row,col,num): &lt;br /&gt;
    for i in range(3): &lt;br /&gt;
        for j in range(3): &lt;br /&gt;
            if(arr[i+row][j+col] == num): &lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
# verifie validiter case&lt;br /&gt;
def check_location_is_safe(arr,row,col,num): &lt;br /&gt;
    return not used_in_row(arr,row,num) and not used_in_col(arr,col,num) and not used_in_box(arr,row - row%3,col - col%3,num) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
def solve_sudoku(arr):     &lt;br /&gt;
    l=[0,0]&lt;br /&gt;
    if(not find_empty_location(arr,l)): &lt;br /&gt;
        return True&lt;br /&gt;
    global counter_back&lt;br /&gt;
    row=l[0] &lt;br /&gt;
    col=l[1] &lt;br /&gt;
    for num in location_possiblity(arr,row,col): &lt;br /&gt;
        if(check_location_is_safe(arr,row,col,num)):  &lt;br /&gt;
            arr[row][col]=num  &lt;br /&gt;
            if(solve_sudoku(arr)):&lt;br /&gt;
            # if solution+=1 print(grid)&lt;br /&gt;
                return True&lt;br /&gt;
            # return un entier nombre de solution&lt;br /&gt;
            arr[row][col] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            counter_back+=1&lt;br /&gt;
    return False&lt;br /&gt;
    #return counter&lt;br /&gt;
&lt;br /&gt;
counter_back = 0 &lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    grid=[[0 for x in range(9)]for y in range(9)] &lt;br /&gt;
    grid=[[3,0,6,5,0,8,4,0,0], &lt;br /&gt;
          [5,2,0,0,0,0,0,0,0], &lt;br /&gt;
          [0,8,7,0,0,0,0,3,1], &lt;br /&gt;
          [0,0,3,0,1,0,0,8,0], &lt;br /&gt;
          [9,0,0,8,6,3,0,0,5], &lt;br /&gt;
          [0,5,0,0,9,0,6,0,0], &lt;br /&gt;
          [1,3,0,0,0,0,2,5,0], &lt;br /&gt;
          [0,0,0,0,0,0,0,7,4], &lt;br /&gt;
          [0,0,5,2,0,6,3,0,0]]&lt;br /&gt;
&lt;br /&gt;
    if(solve_sudoku(grid)): &lt;br /&gt;
        print_grid(grid)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
    else: &lt;br /&gt;
        print(&amp;quot;No solution exists&amp;quot;)&lt;br /&gt;
        print(counter_back)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12367</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12367"/>
		<updated>2020-05-16T09:23:47Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
&lt;br /&gt;
Le Backtracking fonctionne bien pour les résolutions de casse tête comme le sudoku.&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
Ce premier algorithme teste toutes les branches de l&#039;arbre de possibilité de la grille de sudoku. Pour ce faire l’algorithme commence par prendre une case vide. &lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12366</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12366"/>
		<updated>2020-05-16T09:11:31Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;br /&gt;
&lt;br /&gt;
=== Algorithme python ===&lt;br /&gt;
&lt;br /&gt;
==== Sudoku basique ====&lt;br /&gt;
&lt;br /&gt;
==== Sudoku avec réflexion ====&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12365</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12365"/>
		<updated>2020-05-16T09:06:07Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12364</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12364"/>
		<updated>2020-05-16T09:05:56Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12363</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12363"/>
		<updated>2020-05-16T09:05:37Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre_backtracking.png]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Arbre_backtracking.png&amp;diff=12362</id>
		<title>Fichier:Arbre backtracking.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Arbre_backtracking.png&amp;diff=12362"/>
		<updated>2020-05-16T09:04:41Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12361</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12361"/>
		<updated>2020-05-16T09:03:14Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:arbre.png]]&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12360</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12360"/>
		<updated>2020-05-16T09:00:27Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12359</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12359"/>
		<updated>2020-05-16T08:56:46Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
=== Principe du backtracking ===&lt;br /&gt;
&lt;br /&gt;
=== Résolution de sudoku ===&lt;br /&gt;
&lt;br /&gt;
==== Algorithme basique ====&lt;br /&gt;
&lt;br /&gt;
==== Algorithme avec réflexion ====&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12358</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12358"/>
		<updated>2020-05-16T08:54:29Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;br /&gt;
&lt;br /&gt;
=== Principe du backtracking ===&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12357</id>
		<title>VISI201 Backtracking (PICHENOT Simon)</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=VISI201_Backtracking_(PICHENOT_Simon)&amp;diff=12357"/>
		<updated>2020-05-16T08:50:45Z</updated>

		<summary type="html">&lt;p&gt;Spichenot : Page créée avec « Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une va... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le backtracking est une catégorie d’algorithme qui permet de résoudre des problèmes en explorant toutes les possibilités. Pour cela le principe est de choisir une variable du problème, et pour chaque affectation possible de cette variable tester si il y a une solution possible. Si aucune solution n&#039;est trouvée, l&#039;algorithme abandonne et revient sur l&#039;affectation précédente.&lt;/div&gt;</summary>
		<author><name>Spichenot</name></author>
	</entry>
</feed>