分类: C/C++
2009-05-14 14:53:25
queenList[0] = 0; queenList[1] = 3; queenList[2] = 1; queenList[3] = 4; queenList = 2;
bool IsSafe(int col, int row, int[] queenList)
{
//只检查前面的列
for (int tempCol = 0; tempCol < col; tempCol++)
{
int tempRow = queenList[tempCol];
if (tempRow == row)
{
//同一行
return false;
}
if (tempCol == col)
{
//同一列
return false;
}
if (tempRow - tempCol == row - col || tempRow + tempCol == row + col)
{
return false;
}
}
return true;
}////// 在第col列寻找安全的row值 /// /// /// /// public bool PlaceQueue(int[] queenList, int col) { int row = 0; bool foundSafePos = false; if (col == 8) //结束标志 { //当处理完第8列的完成 foundSafePos = true; } else { while (row < 8 && !foundSafePos) { if (IsSafe(col, row, queenList)) { //找到安全位置 queenList[col] = row; //找下一列的安全位置 foundSafePos = PlaceQueue(queenList, col + 1); if (!foundSafePos) { row++; } } else { row++; } } } return foundSafePos; }
static void Main(string[] args)
{
EightQueen eq = new EightQueen();
int[] queenList = new int[8];
for (int j = 0; j < 8; j++)
{
Console.WriteLine("-----------------" + j + "---------------------");
queenList[0] = j;
bool res = eq.PlaceQueue(queenList, 1);
if (res)
{
Console.Write(" ");
for (int i = 0; i < 8; i++)
{
Console.Write(" " + i.ToString() + " ");
}
Console.WriteLine("");
for (int i = 0; i < 8; i++)
{
Console.Write(" " + i.ToString() + " ");
for (int a = 0; a < 8; a++)
{
if (i == queenList[a])
{
Console.Write(" q ");
}
else
{
Console.Write(" * ");
}
}
Console.WriteLine("");
}
Console.WriteLine("---------------------------------------");
}
else
{
Console.WriteLine("不能完成棋局,棋局失败!");
}
}
Console.Read();
}