| CursedCrow
| Joined: 24 Jun 2007 | Posts: 1 | : | Location: Poland - Warsaw | Items |
|
Posted: Mon Jun 25, 2007 12:12 am Post subject: New look for creating of Sudoku. |
|
|
Hi there. I try to do Sudoku generator in c++ builder. I start my adventure with c++ not long time ago, and I stuck. I`m from Poland so comments are in Polish but You shouldn`t have problems with understand what it does. I can create Only One 3x3 grid, some times Two but not more. Can you give me any sugestions what to do next. This is the code :
//---------------------------------------------------------------------------
#include <vcl>
#pragma hdrstop
#include "Unit1.h"
#include "generator.h"
#include <iostream>
#include <cstdlib>
using namespace std;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
tablica->GridLineWidth = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int tab[9][9];
zeruj(tab);
generuj(tab,0,3,3,6);
generuj(tab,6,9,3,6);
for (int i=0; i<9; i++)
for (int j=0; j<9>Cells[i][j] = tab[i][j];
}
//---------------------------------------------------------------------------
and file with functions :
#include "generator.h"
#include <iostream>
#include <cstdlib>
#include <time>
#include <stdio>
using namespace std;
//---------------------------------------------------------------------------
void zeruj(int plansza[9][9])
{
//Zerowanie tablicy
for (int k=0; k<9; k++)
for (int l=0; l<9; l++)
plansza[k][l]=0;
}
void generuj(int plansza[9][9], int p1, int p2, int q1, int q2)
{
srand ( time(NULL) );
int temp;
int tes;
bool gd=true,gd2=true;
bool l1=true;
bool l2=true;
bool l3=true;
bool l4=true;
bool l5=true;
bool l6=true;
bool l7=true;
bool l8=true;
bool l9=true;
// plansza[3][0]=1;
// plansza[3][1]=2;
// plansza[3][2]=3;
// plansza[3][6]=4;
// plansza[3][7]=5;
// plansza[3][8]=6;
for (int k=p1; k<p2; k++)
for (int l=q1; l<q2; l++) {
do
{
temp = rand()%9 + 1;
// Sprawdzanie po kwadracie
for (int i=p1; i<p2; i++)
for (int j=q1; j<q2; j++)
{
tes=plansza[i][j];
switch (tes)
{
case 1 : l1=false; break;
case 2 : l2=false; break;
case 3 : l3=false; break;
case 4 : l4=false; break;
case 5 : l5=false; break;
case 6 : l6=false; break;
case 7 : l7=false; break;
case 8 : l8=false; break;
case 9 : l9=false; break;
default : gd2=true; break;
}
}
switch (temp)
{
case 1 : {if (l1==false) gd2=false; } break;
case 2 : {if (l2==false) gd2=false; } break;
case 3 : {if (l3==false) gd2=false; } break;
case 4 : {if (l4==false) gd2=false; } break;
case 5 : {if (l5==false) gd2=false; } break;
case 6 : {if (l6==false) gd2=false; } break;
case 7 : {if (l7==false) gd2=false; } break;
case 8 : {if (l8==false) gd2=false; } break;
case 9 : {if (l9==false) gd2=false; } break;
default : gd2=true; break;
}
// Sprawdzanie po kolumnie
for(int t=0; t<9; t++)
{
if (plansza[k][t]==temp)
{gd = false; break;}
else gd = true;
// Sprawdzanie po wierszu
if (plansza[t][l]==temp)
{gd = false; break;}
else gd = true;
}
if (gd==true && gd2==true)
plansza[k][l] = temp;
} while ((gd != true) || (gd2 != true));
}
} |
|