begin process at 2012 05 29 22:22:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Probleme : Sudoku en C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme : Sudoku en C

mardi 18 mai 2010 à 22:09:57 | Probleme : Sudoku en C

seth59222

Bonsoir, voila je suis actuellement en première année d'info, donc assez novice et je viens de créer ce petit bout de programme en C qui consiste a résoudre une grille de Sudoku mais je rencontre actuellement un soucis lors de l'exécution (grille totalement décalée, chiffre en bataille etc)

pouvez vous m'aider tout en restant dans cette méthode certainement grossière mais bon :s

Voici le Code source ::

#include<stdio.h>
#define MAX 10
#define MAZ 90
#define MAK 9
typedef int tab [MAX][MAX];
typedef int solval [MAZ];
typedef int ligne [MAK];

int nbvaleur ( tab t) //initialisation des valeurs du tableau à 0.
{int i,j,n=0;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if ( t[i][j]==0)
{n++;}
}
}
return n;
}

void init ( solval sol, int n)
{int i;
for (i=0;i<n;i++)
sol[i]=1;
}

int cresol ( solval sol, int n)
{int i,s=0;
for (i=0;i<n;i++)
{
s=s+sol[i];
}
if (s == n*9)
return 0;
sol[n-1]=sol[n-1]+1;
for (i=n-1;i>0;i--)
{
if ( sol[i]==10)
{
sol[i-1]=sol[i-1]+1;
sol[i]=1;
}
}
}

void recupsodu (tab t)
{FILE *f;
f=fopen("sudoku.txt","r");
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
fscanf(f,"%d",&t[i][j]);
}
}
fclose(f);
}


void affiche ( tab t)
{int z,i,j,n=0;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if ( t[i][j]==0)
printf(" ");
else printf("%d ",t[i][j]);
if (j==2 || j==5)
printf(" | ");
}
printf("\n");
if ( i==2 || i==5)
{
for (z=0;z<23;z++)
printf("-");
printf("\n");
}
}
}

void creanew (tab t, tab t2, solval sol) // création nouveau tableau
{int i,j,n=0;
for (i=0;i<9;i++)
{
for (j=0;j<9;j++)
{
t2[i][j]=t[i][j];
}
}
for (i=0;i<9;i++)
{
for (j=0;j<9;j++)
{
if ( t2[i][j]==0)
{
t2[i][j]=sol[n];
n++;
}
}
}
}

void initligne (ligne t) // initialisation des lignes
{int i;
for (i=0;i<9;i++)
t[i]=0;
}

int verif ( tab t) // vérification pour les ligne/colonne et carré
{int z,i,j,n;
char a;
ligne ts;
//affiche(t);
//scanf(" %c",a);
// pour les ligne
for (i=0;i<9;i++)
{initligne(ts);n=0;
for (j=0;j<9;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les lignes\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

//pour les colonnes
for(i=0;i<9;i++)
{
initligne(ts);n=0;
for(j=0;j<9;j++)
{
for(z=0;z<9;z++)
{
if ( t[j][i]==ts[z])
{//printf("pour les colonnes\n");
return 0;}
}
ts[n]=t[j][i];
n++;
}
}
//pour les carres
initligne(ts);n=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les carres\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

initligne(ts);n=0;
for(i=1;i<3;i++)
{
for(j=3;j<6;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les carres\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

initligne(ts);n=0;
for(i=1;i<3;i++)
{
for(j=6;j<9;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les carres\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

initligne(ts);n=0;
for(i=3;i<6;i++)
{
for(j=0;j<3;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les carres\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

initligne(ts);n=0;
for(i=3;i<6;i++)
{
for(j=3;j<6;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les carres\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

initligne(ts);n=0;
for(i=3;i<6;i++)
{
for(j=6;j<9;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les carres\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

initligne(ts);n=0;
for(i=6;i<9;i++)
{
for(j=0;j<3;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les carres\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

initligne(ts);n=0;
for(i=6;i<9;i++)
{
for(j=3;j<6;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les carres\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

initligne(ts);n=0;
for(i=6;i<9;i++)
{
for(j=6;j<9;j++)
{
for (z=0;z<9;z++)
{
if ( t[i][j]==ts[z])
{//printf("pour les carres\n");
return 0;}
}
ts[n]=t[i][j];
n++;
}
}

return 1;
}

void affichesol ( solval t, int n)
{int i;
for(i=0;i<n;i++)
printf("%d",t[i]);
printf("\n");

}
void resul ( tab t)
{int z=0,n,a=1;
solval sol;
tab t2;
n=nbvaleur(t);
printf("%d\n\n",n);
init(sol,n);
while ( z==0 && a==1)
{

a=cresol(sol,n);
//affichesol(sol,n);

creanew(t,t2,sol);
//fiche(t2);
//printf("*\n");
z=verif(t2);
}
if (z==0)
printf("il n'y a pas de solution\n");
else
{ printf("\n");affiche(t2);
}
}

main()
{tab t;

recupsodu(t);
affiche(t);
resul(t);
system("pause");
return 0;
}

Merci d'avance pour votre aide :(
mardi 18 mai 2010 à 22:13:23 | Re : Probleme : Sudoku en C

seth59222

j'ajoute aussi la composition de mon fichier sudoku.txt


640013900
100026400
029045700
002000830
860037019
700209000
001300690
939408020
005000000


Cette discussion est classée dans : int, printf, for, ts, if


Répondre à ce message

Sujets en rapport avec ce message

Problème générateur de grille de sudoku en C [ par Dovah ] Bonjour, je suis débutant en programmation, et pour m'entraîner j'ai décidé de créer un programme qui génère aléatoirement une grille de sudoku en C besoin d'aide dans programme en c [ par houda986 ] salut; je suis un débutante en programmation et j'ai besoin d'aide pour la résolution d'un programme en C,c'est un programme de tri par base ... j'ai probleme d'allocation d'une matrice [ par emomar ] salut à tous voila j'ai un probleme avec la fonction remplir voila le code si quelqu'un peut m'aider merci code : [code=cpp]#include #include int n appel de fonction [ par ibnjabal ] Bonjour j'essaie de faire une fonction qui calcule la somme de deux matrice et ça fonctionne bien mais seulement c'est quand j'essaie de le faire dans Besoin d'aide c++ [ par sevio14 ] Quelqu'un peut-il m'aider à faire le programme de l'algorithme d'uzawa? Voici ce que j'ai commencé à définir: #include #include #include #includ fonction en c [ par badsha ] j'ai un code qui inverse une matrice et je veux l'appliquer sur plusieurs matrices je n'arrive pas à mettre à l'entrée de la fonction des matrices, je Problème compréhension du programme le compte est bon [ par echec ] Bonjour,Je cherchai un programme c++ sur internet qui permettait de calculer la solution du jeu le compte est bon, j'en est finalement trouvé un, mais Gestion de plusieurs ports RS232 [ par dissezfr ] Bonjour à tous d'abordJ'ai récupéré un code sur le site permettant de géré un port série, j'aimerai piloter 8 (voir +) ports série avec un seul ordina Sauvegarde de fichier géométrique simple dans un fichier sous xp. [ par DeathRavage ] Bonjour à tous j'ai pour projet de développer un programme permetant le dessin de formes géométriques simples et leur sauvegarde dans un fichier.j'ai ce code ne marche pas?????????? [ par banak3181 ] s'il vous plait les gars je veux que quelqu'un me disent pourquoi ce code ne marche sur dev C++:#include #include #include #include # include<myconio.


Nos sponsors


Sondage...

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 : 2,200 sec (3)

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