공부하느라 만든 Sudoku 계산 프로그램

김일목의 이미지

리펙토링, 디자인 패턴 공부하면서 만들어본 스도쿠 계산 프로그램입니다.
알고리즘은 숫자를 순서대로 대입하다가 틀리면 백트랙킹하는 방식입니다.
아직도 리펙토링 해야 할 부분이 많은것 같은데 고수님들의 조언 부탁드립니다.

File attachments: 
첨부파일 크기
Package icon sudoku.zip3.85 KB
익명 사용자의 이미지

감사합니다\

drinkme의 이미지

int matrix[9][9] = {....};
 
int sudoku(int x, int y)
{
    int i,j;
 
    while(matrix[x][y] > 0)
        if (++x >= 9)
        {
            x = 0;
            if (++y >= 9)
                return 0;
        }
 
    do
    {
loop:   if (++matrix[x][y] > 9)
        {
            matrix[x][y]=0;
            return -1;
        }
 
        for (i = 0; i < 9; i++)
            if (i != x && matrix[i][y] == matrix[x][y])
                goto loop;
 
        for (j = 0; j < 9; j++)
            if (j != y && matrix[x][j] == matrix[x][y])
                goto loop;
 
        for (i = (x / 3) * 3; i < (x / 3) * 3 + 3; i++)
            for (j = (y / 3) * 3; j < (y / 3) * 3 + 3; j++)
                if ((i != x || j != y) && matrix[i][j] == matrix[x][y])
                    goto loop;
    } while(sudoku(x, y) == -1);
    return 0;
}
 
int main()
{
    int i, j, r;
 
    r = sudoku(0, 0);
 
    for (i = 0; i < 9; i++)
    {
        for(j = 0; j < 9; j++)
            printf ("\t%d", matrix[i][j]); 
        printf("\n");
    }
 
    return r;
}