重新整理数据结构与算法——八皇后问题解决[十]

前言

八皇后问题再此就不解释了。

直接赋给你们百度百科了。

https://baike.baidu.com/item/八皇后问题/11053477?fromtitle=八皇后&fromid=10742426&fr=aladdin

思路

1.首先第一个皇后放在棋盘的第一行的第一个位置。

2.然后需要把第二个皇后放在匹配的第二个位置。这时候判断是否和第一个皇后是否冲突。所以我要写一个判断是否冲突的函数。

3.接着我需要把第三个皇后放在第三行的第一个位置。然后判断是否冲突。以此类推,但是呢,如果我把第八个皇后摆完后,我需要会到第7个皇后,判断第七个皇后的下一个位置是否和前7个冲突,如果不冲突,则判断第8个位置是否还有别的位置可放。

这时候就需要回溯了。

解答

static int answerCount = 0;
static void Main(string[] args)
{
	//设置为8皇后
	//定义数组array, 保存皇后放置位置的结果.
	int[] array = new int[8];
	check(0, array);
	Console.WriteLine(answerCount+"种解法");
	Console.ReadKey();
}
/// <summary>
/// 摆放皇后
/// </summary>
/// <param name="n">第几个皇后(n 为0 到 7)</param>
public static void check(int n,int[] arr)
{
	if (n == 8)
	{
		//大于arr
		foreach (var item in arr)
		{
			Console.Write(item+" ");
			
		}
		Console.WriteLine("皇后分割线");
		answerCount++;
		return;
	}
	for (int i=0;i<8;i++)
	{
		arr[n] = i;
		if (judge(n,arr))
		{
			check(n + 1,arr);
		}
	}
   
}
/// <summary>
///  判断是否和其他皇后冲突
/// </summary>
/// <param name="n">第几个皇后(n 为0 到 7)</param>
/// <returns></returns>
public static Boolean judge(int n, int[] arr)
{
	for (int i = 0; i < n; i++) {
		if (arr[i]==arr[n]||n-i== Math.Abs(arr[n]-arr[i]))
		{
			return false;
		}
	}
	return true;
}

结果

一共92种。

posted @   敖毛毛  阅读(224)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示