#include #include #include #include #include void Step1(void); void Step2(void); typedef int TCandidat[9]; TCandidat mesh[9][9]; int start[9][9], roll[9][9]; int board[9][9]; int tempi=0,tempj=0; TCandidat temp_cand; int Rall_number=0; int cont=0; int old_opened=-1; //void Step1(void); //void Step2(void); void Cand_Init(TCandidat a) {int i; for(i=0;i<9;i++) a[i]=1; } void Init_9_9( int a[9][9]) {int i,j; for(i=0;i<9;i++) for(j=0;j<9;j++) a[i][j]=0; } int Cand_Count(TCandidat a) {int i, c=0; for(i=0;i<9;i++) if (a[i]==1) c++; return c; } int Unic_RCM(int a,int b, int val) {int i,j,flag=0; // unic in a row for(j=0;j<9;j++) if(board[a][j]==val) flag++; if (flag==0) //unikalno v stroke, proverjaem stolbets {for(i=0;i<9;i++) if(board[i][b]==val) flag++; } if (flag==0) //unikalno i v stroke, i v stolbtse, proverim sector {for(i=(a/3)*3;i<(a/3)*3+3;i++) for(j=(b/3)*3;j<(b/3)*3+3;j++) if(board[i][j]==val) flag++; } if( flag==0) return 1; // chislo unikalno else return 0; // chislo ne unikalno } int Cand_to_Number(TCandidat a) {int i,c=0; for(i=0;i<9;i++) if(a[i]==1) {c=i+1; break; } return c; } void Step1(void) {for(int i=0;i<9;i++) for(int j=0;j<9;j++) board[i][j]=start[i][j]; // find a place for a value do { tempi=random(9); tempj=random(9); } while(board[tempi][tempj]!=0); // cout<<"\nposition:"<0)&&(flag<81)&&(old_opened==flag)) {old_opened=flag; cout<<"\nGOTO Step1"; Step1(); } } } void main(void) { randomize(); Init_9_9(start); Init_9_9(roll); Init_9_9(board); cout<