递归-八皇后/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
 


}

posted on 2008-02-02 18:18  Haozes  阅读(584)  评论(0编辑  收藏  举报