#include<iostream.h>
#include<string.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int tamij[2][81],th=1,i,j,tang,so[81],a=0;
char kt1[2]="c",kt[2]="c",A[9][9],so_khac[81][9],***B;
void wellcome();
int ss_ngang(char a,int b);
int ss_doc(char a, int b);
int ss_o(char a, int b,int c);
int kiem_tra();
void nhap();
void in();
void dien_so();
void tim_o_trong(int a);
void tim_so_khac(int a, int b,int c);
void so_co_the_dien(int a);
void dien_tiep(int a);
void main(){
while(kt[0]=='c'||kt[0]=='C'){
wellcome();
cin>>kt;
if(kt[0]=='c'||kt[0]=='C'){
// Nhap chuoi thich hop
nhap();
//dien nhung so thich hop
dien_so();
//kiem tra dung sai sau khi dien
if(kiem_tra()==1){
cout<<"
Co duy nhat 1 dap an: ";
in();
getch();
};
if(kiem_tra()==0){
a=0;
// tao mang dong
B=new char** [81];
for(int q=0;q<81;q++)
B[q]=new char* [9];
for(int w=0;w<81;w++)
for( int r=0;r<9;r++)
B[w][r]=new char [9];
dien_tiep(a);
};
};
};
};
void wellcome(){
clrscr();
cout<<"CHUONG TRINH GIAI TRO CHOI \"SUDOKU\"";
cout<<"
Ban nhap vao tung hang ngang voi o khong co so ban hay nhap dau cham";
cout<<"
Ban co muon giai o \"SUDOKU\" nao khong (c/k):";
};
void nhap(){
int t=0;
char chuoi[10];
cout<<"
";
for(int i=0;i<9;i++){
cout<<"nhap mot chuoi:";
gets(chuoi);
for (int j=0;j<9;j++){
A[t][j]=chuoi[j];
chuoi[j]=' ';
};
chuoi[9]=' ';
t++;
};
};
void in(){
cout<<"
";
for (int i=0;i<9;i++)
for (int j=0;j<9;j++){
if(j==3||j==6)cout<<" ";
cout<<A[i][j];
if (j==8) cout<<"
";
if((i==2||i==5)&j==8)cout<<"
";
};
};
void dien_so(){
char tam,tam2,so[]="123456789";
int lap,khac=0;
lap=1;
while (lap==1){
lap=0;
for (int i=0;i<9;i++)
for( int j=0;j<9;j++){
if (A[i][j]=='.'){
for (int k=0;k<9;k++){
tam=so[k];
if((ss_ngang(tam,i)==1)&&(ss_doc(tam,j)==1)&&(ss_o(tam,i,j)==1))
{
tam2=tam;
khac++;
};
};
if(khac==1){
A[i][j]=tam2;
lap=1;
};
};
tam=' ';tam2=' ';khac=0;
};
};
};
int ss_ngang(char a, int b){
int tam=1;
for (int i=0;i<9;i++)
if (a==A[b][i]) tam=0;
return tam;
};
int ss_doc(char a,int b){
int tam=1;
for (int i=0;i<9;i++)
if (a==A[i][b]) tam=0;
return tam;
};
int ss_o(char a, int b, int c){
int tam=1;
if (b<3&&c<3){
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
if (a==A[i][j]) tam=0;
};
if (b<3&&c>2&&c<6){
for (int i=0;i<3;i++)
for (int j=3;j<6;j++)
if (a==A[i][j]) tam=0;
};
if (b<3&&c>5&&c<9){
for (int i=0;i<3;i++)
for (int j=6;j<9;j++)
if (a==A[i][j]) tam=0;
};
if (b>2&&b<6&&c<3){
for (int i=3;i<6;i++)
for (int j=0;j<3;j++)
if (a==A[i][j]) tam=0;
};
if (b>2&&b<6&&c>2&&c<6){
for (int i=3;i<6;i++)
for (int j=3;j<6;j++)
if (a==A[i][j]) tam=0;
};
if (b>2&&b<6&&c>5&&c<9){
for (int i=3;i<6;i++)
for (int j=6;j<9;j++)
if (a==A[i][j]) tam=0;
};
if (b>5&&b<9&&c<3){
for (int i=6;i<9;i++)
for (int j=0;j<3;j++)
if (a==A[i][j]) tam=0;
};
if (b>5&&b<9&&c>2&&c<6){
for (int i=6;i<9;i++)
for (int j=3;j<6;j++)
if (a==A[i][j]) tam=0;
};
if (b>5&&b<9&&c>5&&c<9){
for (int i=6;i<9;i++)
for (int j=6;j<9;j++)
if (a==A[i][j]) tam=0;
};
return tam;
};
int kiem_tra(){
char tam='.';
int kq=1;
for(int i=0;i<9;i++)
for (int j=0;j<9;j++)
if(tam==A[i][j]) kq=0;
return kq;
};
void tim_o_trong(int a){
tang=0;
for (int i=0;i<9;i++)
for(int j=0;j<9;j++)
if (A[i][j]=='.')
{
tang++;
for(int e=0;e<2;e++)
for(int f=0;f<tang;f++){
if(e==0) tamij[0][a+tang-1]=i;
if(e==1) tamij[1][a+tang-1]=j;
};
};
for(int g=a+1;g<81;g++)
{
tamij[0][g]=0;
tamij[1][g]=0;
};
};
void tim_so_khac( int a, int b,int c){
char so[]="123456789";
int cho_dien=0;
for(int i=0;i<9;i++)
so_khac[c][i]='0';
for (int k=0;k<9;k++){
if((ss_ngang(so[k],a)==1)&&(ss_doc(so[k],b)==1)&&(ss_o(so[k],a,b)==1))
{
cho_dien++;
so_khac[c][cho_dien-1]=so[k];
};
};
};
void so_co_the_dien(int a){
int tang1=0;
for(int i=0;i<9;i++){
if(so_khac[a][i]!='0') tang1++;
so[a]=tang1;
};
};
void dien_tiep(int a){
for(int t=0;t<9;t++)
for(int u=0;u<9;u++)
B[a][t][u]=A[t][u];
tim_o_trong(a);
tim_so_khac(tamij[0][a],tamij[1][a],a);
so_co_the_dien(a);
if(so[a]!=0&&(kt1[0]=='c'||kt1[0]=='C')){
for(int x=0;x<so[a];x++){
for(int w=0; w<9;w++)
for(int r=0; r<9; r++)
A[w][r]=B[a][w][r];
if(so_khac[a][x]!='0'&&(kt1[0]=='c'||kt1[0]=='C')){
i=tamij[0][a];
j=tamij[1][a];
A[i][j]=so_khac[a][x];
dien_so();
if(kiem_tra()==1){
cout<<"
Truong hop "<<th<<" la:
";
th++;
in();
cout<<"
Ban co muon xem tiep truong hop khac khong (c/k):";
cin>>kt1;
};
if(kiem_tra()==0){
dien_tiep(a+1);
};
};
};
};
};
Bạn đang đọc truyện trên: truyentop.pro