PDA

View Full Version : کد سودوکو



mohammad_kazem
سه شنبه 08 اردیبهشت 1388, 15:35 عصر
با سلام خدمت دوستان عزیز
یه کد یا شبه کد برای حل جدول سودوکو میخوام
لطفا کمکم کنید

meysam_pro
سه شنبه 08 اردیبهشت 1388, 16:38 عصر
کلاسی که سودوکو رو حل میکنه


namespace sudoku
{
class Sudoku
{
private byte[,] table_sudoku = new byte[9, 9];
private byte[,] Row_subSquare = new byte[,]
{
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{3,3,3,3,3,3,3,3,3},
{3,3,3,3,3,3,3,3,3},
{3,3,3,3,3,3,3,3,3},
{6,6,6,6,6,6,6,6,6},
{6,6,6,6,6,6,6,6,6},
{6,6,6,6,6,6,6,6,6}
};
private byte[,] Col_subSquare = new byte[,]
{
{0,0,0,3,3,3,6,6,6},
{0,0,0,3,3,3,6,6,6},
{0,0,0,3,3,3,6,6,6},
{0,0,0,3,3,3,6,6,6},
{0,0,0,3,3,3,6,6,6},
{0,0,0,3,3,3,6,6,6},
{0,0,0,3,3,3,6,6,6},
{0,0,0,3,3,3,6,6,6},
{0,0,0,3,3,3,6,6,6}
};
public Sudoku(byte[,] data)
{
table_sudoku = data;
}
private byte firstValidNumber(byte[] numbers)
{
for (int i = 0; i < 10; i++)
{
if (numbers[i] != 0) return numbers[i];
}
return 0;
}
public bool Solve()
{
int x=0;
int y=0;
byte finalNumber=0;
int BestGuess=10;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
if (table_sudoku[i, j] == 0)
{
byte[] possibleNumber = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

for (int k = 0; k < 9; k++)
{
possibleNumber[table_sudoku[k, j]] = 0;//remove number in column
possibleNumber[table_sudoku[i, k]] = 0;//remove number in row
}
for (int row = Row_subSquare[i, j]; row < Row_subSquare[i, j] + 3; row++)
for (int col = Col_subSquare[i, j]; col < Col_subSquare[i, j] + 3; col++)
possibleNumber[table_sudoku[row, col]] = 0;
int countPossibleNumber=0;
for (byte c = 0; c < 10; c++)
{
countPossibleNumber += possibleNumber[c] == 0 ? 0 : 1;
}
if (countPossibleNumber < BestGuess)
{
BestGuess = countPossibleNumber;
x = i;
y = j;
finalNumber = firstValidNumber(possibleNumber);
}
}
}
}

if (BestGuess == 10)
return true;
if (BestGuess == 0)
return false;
table_sudoku[x, y] = finalNumber;
if (Solve())
return true;
table_sudoku[x, y] = 0;
return false;

}
public byte[,] GetResult()
{
return table_sudoku;
}
}
}