Gear.Turbo

八皇后问题(C#)

传说中的八皇后问题,想了n年,想的头疼,想的睡不着觉,想的不吃饭!上网搜别人的程序,一看就头疼,不是很复杂代码凌乱没法看就是千篇一律的blog抄袭,就是不想看。今天突然豁然开朗,思路清晰的不得了,emacs上几行代码变实现:: )

using System;
class Queen
{
    
int[] data = new int[8];        //记录每一行的皇后放置位置
    int count = 0;            
    
public void search(int n)
    
{
        
for (int i = 0; i < 8; i++)    //遍历要放置皇后的当前行的每一个位置
        {
            
int j = 0;
            
for (; j < n; j++)        //检测当前位置是否与前面的皇后冲突
                if (i == data[j] || (i - n) == (data[j] - j) || (i + n) == (data[j] + j)) break;
            
if (j == n)                    //不冲突
            {
                data[n] 
= i;        //记录当前放置位置
                if (n == 7) print(++count); else search(n + 1);    //放置下一行
            }

        }

    }

    
public void print(int count)
    
{
        Console.Write(
"第{0}种方案:\t", count);
        
for (int i = 0; i < 8; i++) Console.Write("{0}\t", data[i]);
    }

}

class program
{
    
public static void Main()
    
{
        Queen q 
= new Queen();
        q.search(
0);
    }

}

posted on 2007-01-18 17:42  lsp  阅读(635)  评论(0)    收藏  举报

导航