class Program
{
static void Main(string[] args)
{
int[,] chessboard = new int[6, 6]{
{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,0,0,0 },
{0,0,0,0,0,0 }
};
Random random = new Random();//创建一个随机数
for (int i = 0; i < chessboard.GetLength(0); i++)
{
int temp = random.Next(0, 6);
chessboard[i, temp] = 2;
}//随机填充一下每行的皇后
ShowChessboard(chessboard);//显示填充之后的棋盘
bool isNeed = CheckChessboard(chessboard);//判断是不是满足6皇后
Message(isNeed);//控制台显示是不是
while (true)//死循环重复生存棋盘直到找到一个6皇后的解
{
isNeed= CheckChessboard(chessboard);
if (isNeed == true) break;//满足规则结束循环
ResetTheBoard(chessboard, random);//不满足继续重新生成
}
ShowChessboard(chessboard);//显示6皇后棋盘
Message(isNeed);//控制台显示是不是
}
/// <summary>
/// 根据规则 输出到控制台提示
/// </summary>
/// <param name="isNeed"></param>
static void Message(bool isNeed) {
if (isNeed)
{
Console.WriteLine("棋盘满足六皇后规则");
}
else
{
Console.WriteLine("棋盘不满足六皇后规则");
}
}
/// <summary>
/// 重置棋盘
/// </summary>
/// <param name="arr"></param>
/// <param name="random"></param>
static void ResetTheBoard (int[,] arr,Random random)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
arr[i, j] = 0;
}
}
for (int i = 0; i < arr.GetLength(0); i++)
{
int temp = random.Next(0, 6);
arr[i, temp] = 2;
}
}
/// <summary>
/// 检查棋盘是否符合皇后规则
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
static bool CheckChessboard(int[,] arr)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
int tempJ = GetLine(arr, i, arr.GetLength(1));
for (int j = i + 1; j < arr.GetLength(0); j++)
{
int tempJ1 = GetLine(arr, j, arr.GetLength(1));
if (tempJ == tempJ1)//2行的皇后在同一列
{
return false;
}
if (Math.Abs(i - j) == Math.Abs(tempJ-tempJ1))//2行的皇后在对角线
{
return false;
}
}
}
return true;
}
/// <summary>
/// 显示棋盘
/// </summary>
/// <param name="arr"></param>
static void ShowChessboard(int[,] arr)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
Console.Write(arr[i, j] + ",");
}
Console.WriteLine();
}
}
/// <summary>
/// 传入行数返回这1行皇后在第几列
/// </summary>
/// <param name="arr"></param>
/// <param name="row"></param>
/// <param name="length"></param>
/// <returns></returns>
static int GetLine(int[,] arr, int row, int length)
{
for (int j = 0; j < length; j++)
{
if (arr[row, j] == 2)//这个位置有皇后
{
return j;
}
}
return -1;
}
}
版权声明:本文为liuyi89430原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。