domingo, 8 de março de 2009

Sudoku

Este Exemplo é um algoritmo C# para resolver o problema sudoku.





public class Regra
{
public Dados Iniciar(String init)
{
Dados b = new Dados(init);
Random rand = new Random((int)DateTime.Now.Ticks);
int numIterations = 0;
while (!b.IsComplete)
{
numIterations++;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
for (int k = 1; k < 10; k++)
{
if (b.Move(i, j, rand.Next(1, 10))) break;
}
}
}
if (!b.IsComplete)
{
for (int i = 0; i < 2; i++)
{
b.Move(rand.Next(0, 9), rand.Next(0, 9), 0);
}
}
}
return b;
}
}
public class Dados
{
int[,] board;
public int[,] BoardResultado
{
get { return board; }
}
public Dados()
{
board = new int[9, 9];
}
public Dados(string value)
{
board = new int[9, 9];
int i = 0;
int j = 0;
foreach (char c in value)
{
if (char.IsDigit(c))
{
board[j, i] = Convert.ToInt32(c.ToString());
board[j, i] = board[j, i] * -1;
i++;
if (i >= 9) { i = 0; j++; };
}
}
}
bool In(int value)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
if (board[i, j] == value) return true;
}
}
return false;
}
public bool IsComplete
{
get
{
return !In(0);
}
}
public bool Move(int x, int y, int value)
{
if (board[x, y] < 0) return false;
if (!IsLegal(x, y, value)) return false;
board[x, y] = value;
return true;
}
public void GetBox(int x, int y, out int boxX, out int boxY)
{
if (x < 3) boxX = 0; else if (x < 6) boxX = 3; else if (x < 9) boxX = 6; else throw new Exception();
if (y < 3) boxY = 0; else if (y < 6) boxY = 3; else if (y < 9) boxY = 6; else throw new Exception();
}
public bool IsLegal(int x, int y, int value)
{
if (board[x, y] < 0) return false;
if (value == 0) return true;
for (int i = 0; i < 9; i++)
{
if (Math.Abs(board[x, i]) == value) return false;
}
for (int i = 0; i < 9; i++)
{
if (Math.Abs(board[i, y]) == value) return false;
}
int boxX, boxY;
GetBox(x, y, out boxX, out boxY);
for (int i = boxX; i < boxX + 3; i++)
{
for (int j = boxY; j < boxY + 3; j++)
{
if (Math.Abs(board[i, j]) == value) return false;
}
}
return true;
}
}


Link para download da versão


televisão, televisao, lcd, computador, notebook, radio, mp3, mp4, dvd, aparelhos eletronicos, video, som, informatica, celular, telefone, nokia, erickson
Google