seth59222
Messages postés2Date d'inscriptionmardi 18 mai 2010StatutMembreDernière intervention18 mai 2010
-
18 mai 2010 à 22:09
seth59222
Messages postés2Date d'inscriptionmardi 18 mai 2010StatutMembreDernière intervention18 mai 2010
-
18 mai 2010 à 22:13
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 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++;
}
}