• 递归八皇后/N皇后问题


    八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

    using System;
    using System.Collections.Generic;
    using   System.Diagnostics;   


    public class MyClass
    {
        
    static int[] site=new  int[8];  
        
    static    int queenNum=8;
        
    static    int count=0;        //解法数
        public static void Main()
        
    {
            
    //WL();
            Queen(0);
            RL();
        }

        
    public static void Queen(int n)
        
    {
            
    if(queenNum==n)
            
    {
                WL(
    "第{0}种解法",++count);
                
                
    for(int i=0;i<queenNum;i++)
                
    {
                    WL(
    "{0},",site[i]);
                }

                WL(
    "------------------------------------");
                
    return;
            }

            
    else
            
    {
                
    for(int i=0;i<queenNum;i++)
                
    {
                    site[n]
    =i;
                    
    if(IsOk(n))
                        Queen(n
    +1);
                }

            }

        }

        
    public static bool IsOk(int n)
        
    {
            
    for(int i=0;i<n;i++)
            
    {
                
    if(site[i]==site[n])
                    
    return false;
                
    if(Math.Abs(site[i]-site[n])==n-i)
                    
    return false;
            }

            
    return true;
        }

        
    Helper methods
     


    }
  • 相关阅读:
    第七十一课 图的定义与操作
    第七十课 二叉树经典面试题分析
    第六十九课 二叉树的线索化实现
    第六十八课 二叉树的比较与相加
    第六十七课 二叉树的典型遍历方式
    第六十六课 二叉树结构的层次遍历
    第六十五课 二叉树中属性操作的实现
    2018华为笔试题
    交错01串
    操作序列(网易)
  • 原文地址:https://www.cnblogs.com/solo/p/1062858.html
Copyright © 2020-2023  润新知