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


    前言

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

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

    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种。

  • 相关阅读:
    Docker+Jenkins更换国内插件源
    招聘java工程师
    Apache seaTunnel 数据集成平台
    DBeaver连接MySQL问题的解决
    iphone的mov文件复制到电脑的方法
    IDEA中RestfulToolkit插件的安装及使用
    lwm2m 的notify 的机制
    ALI云接入学习
    CAT1 UIS8910模组对接阿里云平台
    任务的堆栈究竟有何魔力
  • 原文地址:https://www.cnblogs.com/aoximin/p/13157533.html
Copyright © 2020-2023  润新知