C#算法巧解八皇后問題淺析
作者:swizard
C#算法巧解八皇后問題是如何實(shí)現(xiàn)的呢?那么本文就像你介紹關(guān)于八皇后問題的C#算法的解決。
八皇后問題問題描述:
八皇后問題是一個(gè)古老而著名的問題,是回溯算法的典型例題。該問題是十九世紀(jì)著名的數(shù)學(xué)家高斯1850年提出:在8X8格的國際象棋上擺放八個(gè)皇后,使其不能互相攻擊,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。
C#算法的解決方法:
- public class Queen
- {
- public Queen()
- {
- //
- // TODO: 在此處添加構(gòu)造函數(shù)邏輯
- //
- }
- private static bool[] columflag=new bool[8]{true,
- true,true,true,true,true,true,true};//列占用標(biāo)記 true為可用
- private static bool[] leftflag=new bool[15]{true,true,true,
- true,true,true,true,true,true,true,true,true,true,true,true};//左行對角線占用標(biāo)記
- private static bool[] rightflag=new bool[15]{true,true,
- true,true,true,true,true,true,true,true,true,true,true,true,true};//右行對角線占用標(biāo)記
- private static int[,] position=new int[,]{{0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0}
- };//皇后位置坐標(biāo)
- private static int sum=0;
- public static void TryStep(int i)//i取值1至8
- {
- for (int j=1;j<=8;j++)
- {
- if (columflag[j-1]&&leftflag[i+j-2]&&rightflag[i-j+7])//如果當(dāng)前位置可以放置
- {
- columflag[j-1]=false;
- leftflag[i+j-2]=false;
- rightflag[i-j+7]=false;//占用
- position[i-1,j-1]=1;//加入皇后位置
- if (i<8)
- {
- TryStep(i+1);//進(jìn)入下一行
- }
- else
- {
- sum++;//解法數(shù)統(tǒng)計(jì)
- Console.WriteLine("");
- Console.WriteLine("第 {0} 種解法:",sum);
- Console.WriteLine("");
- for (int m=0;m<8;m++) //打印解法
- {
- for (int n=0;n<8;n++)
- {
- Console.Write("{0} ",position[m,n]);
- }
- Console.Write("\n");
- }
- }
- columflag[j-1]=true;//如果不能放置時(shí),取消占座及移走皇后
- leftflag[i+j-2]=true;
- rightflag[i-j+7]=true;
- position[i-1,j-1]=0;
- }
- }
- }
- }
C#算法巧解八皇后問題就向你介紹到這里,希望通過這個(gè)例子使你對C#算法有一點(diǎn)認(rèn)識(shí)。
【編輯推薦】
責(zé)任編輯:仲衡
來源:
博客園