begin process at 2012 05 27 19:05:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > RÉSOLUTION SUDOKU (9X9) PAR BACKTRACKING RÉCURSIF INTELLIGENT

RÉSOLUTION SUDOKU (9X9) PAR BACKTRACKING RÉCURSIF INTELLIGENT


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :sudoku, backtracking, algorithme, recursivite, tableau Niveau :Débutant Date de création :14/05/2011 Date de mise à jour :24/05/2011 09:46:27 Vu / téléchargé :4 194 / 115

Auteur : Gallien69

Ecrire un message privé
Site perso
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Résolution Sudoku (9x9) par backtracking récursif intelligent simplement
Code original
http://www.top-sudoku.com/sudoku/fr/exemp le-backtracking-c.php

Source

  • /*
  • ** solve_grid.c for in /home/guicqu_g/projets/c/sudoki-bi
  • **
  • ** Made by gallien guicquero
  • ** Login <guicqu_g@epitech.net>
  • **
  • ** Started on Fri Apr 23 20:17:34 2010 gallien guicquero
  • ** Last update Sat May 14 20:36:01 2011 gallien guicquero
  • */
  • int solve_grid(char grid[9][9], int row, int col);
  • /*
  • ** Check si la grille est complete
  • */
  • int end_grid(char grid[9][9])
  • {
  • int row;
  • int col;
  • row = 9;
  • while (--row >= 0)
  • {
  • col = 9;
  • while (--col >= 0)
  • {
  • if (!grid[row][col])
  • return (0);
  • }
  • }
  • return (1);
  • }
  • /*
  • ** Elimine les chiffres deja present sur la ligne, la colonne puis le carre
  • */
  • void solve_grid_find(char grid[9][9], char vacant[9], int row, int col)
  • {
  • int i;
  • int j;
  • i = -1;
  • while (++i < 9)
  • {
  • if (grid[row][i])
  • vacant[(int)(grid[row][i]) - 1] = 0;
  • if (grid[i][col])
  • vacant[(int)(grid[i][col]) - 1] = 0;
  • }
  • row -= row % 3;
  • col -= col % 3;
  • i = row - 1;
  • while (++i < row + 3)
  • {
  • j = col - 1;
  • while (++j < col + 3)
  • if (grid[i][j])
  • vacant[(int)(grid[i][j]) - 1] = 0;
  • }
  • }
  • /*
  • ** Essaye de completer la grille
  • */
  • int solve_grid_fill(char grid[9][9], int row, int col)
  • {
  • char vacant[9];
  • int test;
  • int save;
  • test = -1;
  • while (++test < 9)
  • vacant[test] = test + 1;
  • solve_grid_find(grid, vacant, row, col);
  • test = -1;
  • while (++test < 9)
  • {
  • if (vacant[test])
  • {
  • save = grid[row][col];
  • grid[row][col] = vacant[test];
  • solve_grid(grid, row, col + 1);
  • if (end_grid(grid))
  • return (0);
  • grid[row][col] = save;
  • }
  • }
  • return (0);
  • }
  • /*
  • ** Parcours la grille a la recherche d'une case a completer
  • */
  • int solve_grid(char grid[9][9], int row, int col)
  • {
  • while (row < 9)
  • {
  • while (col < 9)
  • {
  • if (!grid[row][col])
  • return (solve_grid_fill(grid, row, col));
  • ++col;
  • }
  • col = 0;
  • ++row;
  • }
  • return (0);
  • }
/*
** solve_grid.c for  in /home/guicqu_g/projets/c/sudoki-bi
** 
** Made by gallien guicquero
** Login   <guicqu_g@epitech.net>
** 
** Started on  Fri Apr 23 20:17:34 2010 gallien guicquero
** Last update Sat May 14 20:36:01 2011 gallien guicquero
*/

int     solve_grid(char grid[9][9], int row, int col);

/*
**      Check si la grille est complete
*/

int     end_grid(char grid[9][9])
{
  int   row;
  int   col;

  row = 9;
  while (--row >= 0)
    {
      col = 9;
      while (--col >= 0)
        {
          if (!grid[row][col])
            return (0);
        }
    }
  return (1);
}

/*
**      Elimine les chiffres deja present sur la ligne, la colonne puis le carre
*/

void    solve_grid_find(char grid[9][9], char vacant[9], int row, int col)
{
  int   i;
  int   j;

  i = -1;
  while (++i < 9)
    {
      if (grid[row][i])
        vacant[(int)(grid[row][i]) - 1] = 0;
      if (grid[i][col])
        vacant[(int)(grid[i][col]) - 1] = 0;
    }
  row -= row % 3;
  col -= col % 3;
  i = row - 1;
  while (++i < row + 3)
    {
      j = col - 1;
      while (++j < col + 3)
        if (grid[i][j])
          vacant[(int)(grid[i][j]) - 1] = 0;
    }
}

/*
**      Essaye de completer la grille
*/

int     solve_grid_fill(char grid[9][9], int row, int col)
{
  char  vacant[9];
  int   test;
  int   save;

  test = -1;
  while (++test < 9)
    vacant[test] = test + 1;
  solve_grid_find(grid, vacant, row, col);
  test = -1;
  while (++test < 9)
    {
      if (vacant[test])
        {
          save = grid[row][col];
          grid[row][col] = vacant[test];
          solve_grid(grid, row, col + 1);
          if (end_grid(grid))
            return (0);
          grid[row][col] = save;
        }
    }
  return (0);
}

/*
**      Parcours la grille a la recherche d'une case a completer
*/

int     solve_grid(char grid[9][9], int row, int col)
{
  while (row < 9)
    {
      while (col < 9)
        {
          if (!grid[row][col])
            return (solve_grid_fill(grid, row, col));
          ++col;
        }
      col = 0;
      ++row;
    }
  return (0);
}

 Conclusion

Cet algorithme doit surement pouvoir être améliorer. N'hésiter pas à poster vos améliorations.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

24 mai 2011 09:46:27 :
Ajout du ZIP pour faciliter la récupération du code.

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PROGRAMME DE SUDOKU par AffreuxJojp
Source avec Zip Source avec une capture ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROI... par Thuzhen
Source avec Zip SUDOKU AVEC BACKTRACKING ET DANCING LINK par pabbati
Source avec Zip SUDUKO AVEC ALLEGRO AVEC PLUSIEURS OPTIONS :SOVLEUR ,PRORPOS... par msavyo1
RESOLUTION DE TOUS LES PROBLEMES DE SUDOKU par Fortix

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

tableau unidimensionnel .... [ par slowlover ] j'ai fais un tableau unidimensionnel dont voici l'algorithme:#include&lt;stdio.h&gt;int main(){//declarationsfloat tab[10];int i;for(i=0;i&lt;10;i++){ Projet d'été sur SUDOKU!! Aidez-nous s'il vous plait... [ par Naruttibayo ] Au préalable, nous tenons à remercier tous ceux qui contribuerons à notre projet...On nous demande d'écrire un programme C qui permet de Générer des G Questions urgentes en Algorithme et Complexité [ par nostalgieing ] bonjour j'ai une ambiguté en algorithme et complexité et j'ai quelques questions à poser et j'ai besoin de vos aide c'est urgent 1-quelle est la met algorithme [ par petitlapino ] Salut tout le monde, j'ai un exercice qui demande de calculer la somme d'un tableau en c++ deux à deux par exemple t[1]=2 t[2]=5 t[3]=3 t[4]=9 t[5]=6 problème avec le backtracking (sudoku) [ par anoubest ] Bonjour tt le monde, g a écrire un code pour résoudre un sudoku. on suppose ke la grille en entrée est un tableau de 9*9 chiffres entre 0 et 9 (0 pr l Algorithme de groupage [ par MoknineMoknine ] Bonjour: je un tableau de nombre real. je veut un algorithme ou méthode pour regrouper ces nombres telque chaque groupe doit contenir les nombres qui Algorithme Ford-Fulkerson [ par bzouk ] Bonjour Je suis nouveau sur le site et j'aimerais savoir si il y a dans le site l'algorithme de ford-fulkerson en langage c j'ai cherché partout sur Valeur Tableau [ par ar1du62 ] Bonjour, J'ai besoin de votre aide, je voudrai récupérer les valeurs d'un tableau ( char s[32];) dans une variable *char Par exemple : récuperer da Allocation dynamique tableau 2D : erreur de seg [ par noname001 ] Bonjour à tous, [^^happy13] j'aimerais faire appel à vos lumières concernant deux codes. Ils ont tous les deux pour but de créer un tableau 2D dynami Tableau 2 dimensions ou 1 dimension [ par gazelle100 ] Bonjour, J'aurai besoin d'un petit coup de pouce. Je dois faire un programme utilisant les tableaux et j'ai les tableaux ne sont ma bête noire[^^conf


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales