解决方案 »

  1.   


    bool GetNewQueen(int size, int step)
            {
                bool Metch = false;
                string resultStr = string.Empty;            for (int i = 0; i < size; i++)
                {
                    Metch = false;
                    Queen[step] = i;                if (step > 0)
                    {
                        for (int j = 0; j < step; j++)
                        {
                            int d = Queen[j];
                            if (i == d || i == d + j - step || i == d - j + step)
                            {
                                Metch = true;
                                break;
                            }
                        }                    if (!Metch)
                        {
                            if (step < size-1)
                            {
                                Metch = GetNewQueen(size, step + 1);
                            }
                            else
                            {
                                for (int k = 0; k < size; k++)
                                {
                                    resultStr += Queen[k] + ",";
                                }
                                richTextBox1.Text += resultStr + "\n";
                            }
                        }
                    }
                    else
                    {
                        Metch = GetNewQueen(size, step + 1);
                    }
                }调用:
    int[ ] Queen;
    void Main()
    {
    int size=8;
    Queen=new int[size];
    GetNewQueen(size,0);
    }
      

  2.   

    已测试.
    size=2或3,无结果
    size=4,结果2
    size=5,结果10
    size=8,结果92
      

  3.   

    晕,少粘贴2行代码后面是
    return Metch;
    }
      

  4.   

    八皇后算法实现
      //皇后数量
            static void QueenArithmetic(int size)
            {
                int[] Queen = new int[size];//每行皇后的位置
                int y, x, i, j, d, t = 0;
                y = 0;
                Queen[0] = -1;
                while (true)
                {
                    for (x = Queen[y] + 1; x < size; x++)
                    {
                        for (i = 0; i < y; i++)
                        {
                            j = Queen[i];
                            d = y - i;
                            //检查新皇后是否能与以前的皇后相互攻击
                            if ((j == x) || (j == x - d) || (j == x + d))
                                break;
                        }
                        if (i >= y)
                            break;//不攻击
                    }
                    if (x == size) //没有合适的位置
                    {
                        if (0 == y)
                        {
                            //回溯到了第一行
                            Console.WriteLine("Over");
                            break; //结束
                        }//CodeGo.net/
                        //回溯
                        Queen[y] = -1;
                        y--;
                    }
                    else
                    {
                        Queen[y] = x;//确定皇后的位置
                        y++;//下一个皇后
                        if (y < size)
                            Queen[y] = -1;
                        else
                        {
                            //所有的皇后都排完了,输出
                            Console.WriteLine("\n" + ++t + ':');
                            for (i = 0; i < size; i++)
                            {
                                for (j = 0; j < size; j++)
                                    Console.Write(Queen[i] == j ? 'Q' : '*');
                                Console.WriteLine();
                            }
                            y = size - 1;//回溯
                        }
                    }
                }
                Console.ReadLine();
            }
            #endregion        static void Main(string[] args)
            {
                int size = 8;//皇后数
                QueenArithmetic(size);
            }