Deci...
Incerc sa fac un program care sa verifice daca niste numere pot constitui un joc de sudoku intr-o matrice si daca poate fi completata;
Partea cu verificatul daca numerele sunt asezate corect ruleaza dar cea de-a doua nu!
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f("sudoku.in");
ofstream g("sudoku.out");
int a[10][10],i,j,k2,k3,d2=0,r=0,r2=0,k,d=0,aux,v[10],d5=0,s,o10=0,o,aj,aj2;
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
{f>>a[i][j];
if(a[i][j]>0)
d5++;}
d5=81-d5;
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
if(a[i][j]>=1&&a[i][j]<=9)
{ if(i>=1&&i<=3)
{if(j>=1&&j<=3)
{for(k2=1;k2<=3;k2++)
for(k3=1;k3<=3;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=4&&j<=6)
{for(k2=1;k2<=3;k2++)
for(k3=4;k3<=6;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=7&&j<=9)
{for(k2=1;k2<=3;k2++)
for(k3=7;k3<=9;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++;
d2=0;}}
if(i>=4&&i<=6)
{if(j>=1&&j<=3)
{for(k2=4;k2<=6;k2++)
for(k3=1;k3<=3;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=4&&j<=6)
{for(k2=4;k2<=6;k2++)
for(k3=4;k3<=6;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=7&&j<=9)
{for(k2=4;k2<=6;k2++)
for(k3=7;k3<=9;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}}
if(i>=7&&i<=9)
{if(j>=1&&j<=3)
{for(k2=7;k2<=9;k2++)
for(k3=1;k3<=3;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=4&&j<=6)
{for(k2=7;k2<=9;k2++)
for(k3=4;k3<=6;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=7&&j<=9)
{for(k2=7;k2<=9;k2++)
for(k3=7;k3<=9;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}}}
for(k=1;k<=9;k++)
v[k]=0;
for(i=1;i<=9;i++)
{for(j=1;j<=9;j++)
if(a[i][j]>=1&&a[i][j]<=9)
{aux=a[i][j];
v[aux]++;
for(k=1;k<=9;k++)
if(v[k]>=2)
d++;}
for(k=1;k<=9;k++)
v[k]=0;}
for(k=1;k<=9;k++)
v[k]=0;
for(i=1;i<=9;i++)
{for(j=1;j<=9;j++)
if(a[j][i]>=1&&a[j][i]<=9)
{aux=a[j][i];
v[aux]++;
for(k=1;k<=9;k++)
if(v[k]>=2)
d++;}
for(k=1;k<=9;k++)
v[k]=0;}
for(k=1;k<=9;k++)
v[k]=0;
if(d>0)
r2++;
if(r2>0||r>0)
cout<<"Numerele nu sunt asezate corect";
if(r2==0&&r==0)
cout<<"Numerele sunt asezate corect";
while(o10<1)
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
if(a[i][j]==0)
{s=0;
for(o=1;o<=9;o++)
{aj=a[i][j]; d2=0; d=0; r=0; r2=0;
a[i][j]=o;
if(i>=1&&i<=3)
{if(j>=1&&j<=3)
{for(k2=1;k2<=3;k2++)
for(k3=1;k3<=3;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=4&&j<=6)
{for(k2=1;k2<=3;k2++)
for(k3=4;k3<=6;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=7&&j<=9)
{for(k2=1;k2<=3;k2++)
for(k3=7;k3<=9;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}}
if(i>=4&&i<=6)
{if(j>=1&&j<=3)
{for(k2=4;k2<=6;k2++)
for(k3=1;k3<=3;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=4&&j<=6)
{for(k2=4;k2<=6;k2++)
for(k3=4;k3<=6;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=7&&j<=9)
{for(k2=4;k2<=6;k2++)
for(k3=7;k3<=9;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}}
if(i>=7&&i<=9)
{if(j>=1&&j<=3)
{for(k2=7;k2<=9;k2++)
for(k3=1;k3<=3;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=4&&j<=6)
{for(k2=7;k2<=9;k2++)
for(k3=4;k3<=6;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}
if(j>=7&&j<=9)
{for(k2=7;k2<=9;k2++)
for(k3=7;k3<=9;k3++)
if(a[i][j]==a[k2][k3])
d2++;
if(d2>=2)
r++; d2=0;}}
for(k=1;k<=9;k++)
v[k]=0;
for(i=1;i<=9;i++)
{for(j=1;j<=9;j++)
if(a[i][j]>=1&&a[i][j]<=9)
{aux=a[i][j];
v[aux]++;
for(k=1;k<=9;k++)
if(v[k]>=2)
d++;}
for(k=1;k<=9;k++)
v[k]=0;}
for(i=1;i<=9;i++)
{for(j=1;j<=9;j++)
if(a[j][i]>=1&&a[j][i]<=9)
{aux=a[j][i];
v[aux]++;
for(k=1;k<=9;k++)
if(v[k]>=2)
d++;}
for(k=1;k<=9;k++)
v[k]=0;}
if(d>0)
r2++;
if(r2==0&&r==0)
{s++; aj2=o;}
a[i][j]=aj;}
if(s==1)
{a[i][j]=aj2;
o10++;}}
if(o10==d5)
cout<<"Jocul poate fi completat";
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
g<<a[i][j];
g.close();
f.close();
return 0;
}
Si acum sa explic ce am facut...Partea care nu ruleaza incepe de la while.
Parcurg matricea ... Daca un elemnt este egal cu 0 (adica nu e nimic) se verifica cate numere pot ocupa acel spatiu. Daca doar un numar , acel spatiu este ocupa de nr respectiv.
Cand spun ca nu ruleaza ma refer la faptul ca nu se mai intampla nimic....
Apropo ...uitati o matrice valida
5 3 7 0 8 0 0 2 0
0 6 0 3 9 7 8 0 0
0 0 9 0 5 0 0 0 0
0 1 3 0 2 0 0 0 4
0 2 6 0 0 0 9 3 0
4 0 0 0 7 0 2 6 0
0 0 0 0 4 0 3 0 0
0 0 1 9 6 2 0 7 0
0 4 0 0 3 0 1 9 2
care ar fi trebuit sa fie completata..