Witam,
Przepisałem prawie w 100% kod z filmu youtube
#include<iostream>
#include<conio.h>
using namespace std;
/*int a[9][9]={{0,0,0,0,0,0,0,3,7},
{0,0,4,0,6,0,0,0,0},
{0,0,8,7,0,5,0,6,1},
{9,0,5,0,0,0,2,0,0},
{0,0,6,0,4,9,0,7,0},
{0,8,0,0,0,0,0,1,9},
{0,0,0,0,0,3,0,9,0},
{3,0,7,4,8,0,0,2,0},
{8,0,1,9,0,0,0,0,0}};*/
int a[9][9]={{0,4,5,0,9,0,0,7,0},
{1,0,7,3,0,6,5,0,8},
{0,9,0,2,7,0,0,6,1},
{0,1,0,0,2,0,3,8,0},
{2,0,8,4,1,9,6,0,7},
{0,6,9,0,5,0,0,4,0},
{4,5,0,0,8,2,0,3,0},
{9,0,6,5,0,1,7,0,4},
{0,7,0,0,6,0,8,1,0}};
int b[9][9];
int inputvalue(int x, int y, int value)
{
for(int i=0; i<9; i++)
{
if(value==b[x][i]||value==b[i][y])
return 0;
}
for(int i=(x/3)*3; i<=((x/3)*3)+2; i++)
for(int j=(y/3)*3; j<=((y/3)*3)+2; j++)
if(b[i][j]==value) return 0;
return value;
}
int solve(int x, int y)
{
int k;
int temp;
if(b[x][y]==0)
{
for(int i=1; i<10; i++)
{
temp = inputvalue(x,y,i);
if(temp>0)
{
b[x][y]=temp;
if(x==8 && y==8) return 1;
else if(x==8)
{
if(solve(0, y+1)) return 1;
}
else
{
if(solve(x+1, y)) return 1;
}
}
k=i;
}
if(k==10)
{
if(b[x][y]!=a[x][y])
{
b[x][y]=0;
return 0;
}
}
if(x==8 && y==8) return 1;
else if(x==8)
{
if(solve(0, y+1)) return 1;
}
else
{
if(solve(x+1, y)) return 1;
}
}
}
int main()
{
for(int i=0; i<9; i++)
for(int j=0; j<9; j++)
b[i][j]=a[i][j];
if(solve(0,0))
{
for(int i=0; i<9; i++)
{
cout<<endl;
for(int j=0; j<9; j++)
{
cout<<b[i][j];
}
}
}
else
cout<<"no solve\n";
getch();
return 0;
}
Na youtubie kod działa, tzn. rozwiązuje to same sudoku, co powyżej. U mnie niestety nie.
Gdzie może leżeć problem?