c++ sudoku solver

0

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?

0

Jak się odwołujesz do jakiegoś filmiku to powinieneś dać do niego linka.

0

Co to jest?
Zera w Sudoku?
Może są eksperci potrafiący napisać Sudoku w tylu liniach... Ja ptrzebowałem 10x tyle i to tylko na - przyznam - rozbudowaną logikę. Interfejs i prezentacja swoją drogą.

0

tak, zero to puste miejsce.
Ja piszę program okienkowy, ale najpierw chce samą esencje napisać w konsoli. Może jakieś wskazówki, jak napisać taki program?

0

Dokładnie zapoznac się z logiką gry.
Próbowałeś czegoś prostszego?

0
Rekman napisał(a):

Próbowałeś czegoś prostszego?

Co masz na myśli?

0

Coś łatwiejszego. Jak chociażby nieśmiertejne kółko i krzyżyk.

0

Może są eksperci potrafiący napisać Sudoku w tylu liniach... Ja ptrzebowałem 10x tyle i to tylko na - przyznam - rozbudowaną logikę. Interfejs i prezentacja swoją drogą.

Ja kiedyś napisałem w kilku linijkach, i kod jest gdzieś na tym forum.
Oczywiście oszukiwałem: wprowadzasz reguły i odpalasz Microsoft Solver Foundation.
Od zera (czyli bez gotowego kombajnu matematycznego) rozwiązywacza Sudoku nie pisałem jeszcze nigdy ;-)

0
Rekman napisał(a):

Coś łatwiejszego. Jak chociażby nieśmiertejne kółko i krzyżyk.

To właśnie wczoraj skończyłem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0