عنوان 

  حل زبان سی 

توضیحات :

قانون بازی سودوکو
نوع متداول سودوکو یک جدول ۹x۹ است که کل جدول هم به ۹ جدول کوچک‌تر ۳x۳ تقسیم شده‌است. در این جدول چند عدد به طور پیش فرض قرار داه شده که باید باقی اعداد را با رعایت سه قانون زیر یافت:

قانون اول: در هر سطر جدول اعداد ۱ الی ۹ بدون تکرار قرار گیرد.
قانون دوم: در هر ستون جدول اعداد ۱ الی ۹ بدون تکرار قرار گیرد.
قانون سوم: در هر ناحیه ۳x۳ جدول اعداد ۱ الی ۹ بدون تکرار قرار گیرد.

نوع فایل

فرمت

سورس زبان سی

C , EXE

پیش نمایش از پروژه

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include <stdlib.h>

int I,N,I1,N1;
void main()
{
int c1,c2,c3,i,j,k,K,l,p,q,m,n,M,M1=0,r,r1,s,g=-1,Q=0,
a[9][9][10],a1[10][9][9],A[9][9][10],A1[9][9][10],A2[9][9],w1[81],w2[10],w3[81],
x[10][3],y[10][2],z[81][12],z1[81][12],z2[81][12];
char c,C;
randomize();
clrscr();

//************* user interface ****************

printf(“What do u want (enter appropreate no.):\n\n(1) Suduku Question\n(2) Solve a Suduku Problem\n “);
INF:C=getche();
switch(C)
{
case 49:clrscr();
//۱٫ Gennerating basic matrix:
SEL1: g=-1;n=0;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{ for(k=0;k<10;k++) a[i][j][k]=k; }
}

for(i=0;i<9;i++) // create the basic row
{
for(j=0;j<9;j++) // create the basic row
{
for(l=1;l<10;l++) w1[l]=l;
p=9;
SEL2: l=1+random(p);
k=w1[l];
if(a[i][j][k]==0&&p>0)
{
w1[l]=w1[p]; p–;
goto SEL2;
}
if(p==0) goto SEL1;

a[i][j][0]=k;
for(p=1;p<10;p++) a[i][j][p]=0;

for(p=0;p<9;p++)
{ a[i][p][k]=0; a[p][j][k]=0; }

for(p=(i/3)*3;p<(i/3+1)*3;p++)
{
for(l=(j/3)*3;l<(j/3+1)*3;l++) a[p][l][k]=0;
}
}
}//fi
for(i=0;i<9;i++) //a1=a &&n>26
{
for(j=0;j<9;j++)
{
a1[0][i][j]=a[i][j][0];
A2[i][j]=a[i][j][0];
}
}
Q=1;
SEL:
for(i=0;i<9;i++) //a1=a &&n>26
{
for(j=0;j<9;j++)
{
a[i][j][0]=A2[i][j];
if(A2[i][j]>0) { for(k=1;k<10;k++) a[i][j][k]=0;}
else { for(k=1;k<10;k++) a[i][j][k]=k;}
}
}
for(l=0;l<81;l++) w1[l]=l;
p=80;
SEL3: l=random(p+1); //l:0->p
i=w1[l]/9;j=w1[l]%9;

if(a[i][j][0]==0&&p>0)
{
w1[l]=w1[p]; p–;
goto SEL3;
}
c=i*9+j; //c=last i,j n++;
for(k=0;k<10;k++) a[i][j][k]=k;
goto EL;

SEL4: if(n<50) goto SEL1;

for(i=0;i<9;i++)
{
if(i%3==0)
printf(“\n”);
for(j=0;j<9;j++)
{
if(j%3==0)
printf(” “);
if(A2[i][j]>0) printf(“%d “,A2[i][j]);
else printf(“- “);
}
printf(“\n”);
}
printf(“\nTotal no. of data elenents: %d”,81-n);

printf(“\n\n Display solution (y/n):”);
c=getche();
printf(“\n”);
for(i=0;i<9&&(c==’y’||c==13);i++)
{
if(i%3==0)
printf(“\n”);
for(j=0;j<9;j++)
{
if(j%3==0)
printf(” “);
printf(“%d “,a1[0][i][j]);
}
printf(“\n”);
}
goto END;

case 50:
clrscr();
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{ for(k=1;k<10;k++) a[i][j][k]=k; }
}

printf(“Enter suduku:\n”);
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
c=getche();
printf(” “);
if(c==45) a[i][j][0]=0;
else if(c>48&&c<58)
{
a[i][j][0]=c-48;
for(k=1;k<10;k++) a[i][j][k]=0;
}
else if(c==8){printf(“\b\b”); j=j-2;}
else {printf(“\b\b”); j–;}
}//fj
printf(“\n”);
}//fi
break;
default:{printf(“\b \b”);printf(“\a”); goto INF;}

}

Sudoko

======