程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 八皇後問題的C#解答

八皇後問題的C#解答

編輯:關於C語言
改編自V星[視窗王子]應答程序,如下:<br>
<br>
using System;<br>
class Queen{<br>
    const int SIZE = 8;//皇後數<br>
    public static void Main()<br>
    {<br>
        int[] Queen = new int [SIZE];//每行皇後的位置<br>
        int y,x,i,j,d,t=0;<br>
        y = 0;<br>
        Queen[0] = -1;<br>
        while( true )<br>
        {<br>
            for (x=Queen[y]+1; x<SIZE; x++)<br>
            {<br>
                for (i=0;i<y;i++)<br>
                {<br>
                    j = Queen[i];<br>
                    d = y-i;<br>
                    //檢查新皇後是否與以前的皇後能相互攻擊<br>
                    if ((j==x)||(j==x-d)||(j==x+d))<br>
                        break;<br>
                }<br>
                if (i>=y)<br>
                    break;//不攻擊<br>
            }<br>
            if (x == SIZE) //沒有合適的位置<br>
            {<br>
                if (0==y)<br>
                {<br>
                    //回朔到了第一行<br>
                    Console.WriteLine("Done");<br>
                    break; //結束<br>
                }<br>
                //回朔<br>
                Queen[y]=-1;<br>
                y--;<br>
            }<br>
            else<br>
            {<br>
                Queen[y]=x;//確定皇後的位置<br>
                y++;//下一個皇後<br>
                if (y<SIZE)<br>
                    Queen[y]=-1;<br>
                else<br>
                {<br>
                    //所有的皇後都排完了,輸出<br>
                    Console.WriteLine("\n" + ++t +':');<br>
                    for(i=0;i<SIZE;i++)<br>
                    {<br>
                        for (j=0;j<SIZE;j++)<br>
                            if(Queen[i] == j)<br>
                                Console.Write('Q');<br>
                            else<br>
                                Console.Write('.');<br>
                        Console.WriteLine();<br>
                    }<br>
                    y = SIZE -1;//回朔<br>
                }<br>
            }<br>
        }<br>
    }<br>
}<br>
八皇後有解92個。<br>
另:我認為foreach和for循環在意義上是不同的,在這裡應該用for.<br>
望指正,此致。<br>
重粒子@Y2K0928<br>
<br>
--------------------------------------------------------------------------------<br>
<br>
送交者: 視窗王子  列出所有還未回答的帶星問題   於 9月 28, 2000 09:16:  <br>
主題:多謝重粒子兄  答復本貼<br>
閱讀相關的帖子 <br>
<br>
--------------------------------------------------------------------------------<br>
<br>
回答: 給視窗王子:八皇後問題C#版 由 重粒子 於 9月 27, 2000 22:32:<br>
<br>
非常感謝您的注解以及優化,不過比較了一下結果,好像我倆的結果是一致的。:-)<br>
另外,關於打印的那部分,如果這樣優化:<br>
Console.Write(Queen[i]==j ? 'Q':'.');<br>
似乎可以更簡潔一些,粒子兄以為呢?<br>
關於foreach和for, 的確,無論從字面上還是在文檔中都讓人感到for似乎比foreach更有確定性。然而,foreach畢竟是也一種遍歷,關鍵是遍歷的可重復性和法則,即,每次遍歷的結果是可預計的和相同的。另外,我們可以通過定制Enumerator來決定foreach的遍歷行為,使得“無法遍歷”或“不可預計的”變成“可遍歷”且“可預計的”,如同C++中重載[]算符使得鏈表“變成”了數組。<br>
<br>
對於一些基本數據結構的遍歷,比如數組,foreach還是和for一致的,不過粒子兄提醒的好,對任何事千萬不要想當然,它除了會把你引入歧途外不會給你帶來任何好處。<br>
<br>
目前我正在和MS的C# Developer打交道,事實上現在MS中有部分產品的部分代碼用上了C# (不知是正式的還是做試驗)。很希望和粒子兄以及各位大大小小的蝦兄弟姐妹們一起玩玩這新鮮玩意兒。<br>
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved