八皇后问题(一)
問(wèn)題描述:
要在8*8的國(guó)際象棋棋盤中放8個(gè)皇后,使任意兩個(gè)皇后都不能互相吃掉。規(guī)則是皇后能吃掉同一行、同一列、同一對(duì)角線的棋子。如下圖即是兩種方案:
思路:
比如我們搞個(gè)數(shù)組,數(shù)組的下表表示多少行,然后數(shù)值表示多少列,比如a[4] = 5,意思就代表第四行,第五列
首先看不再同一行、同一列、同一對(duì)問(wèn)題,我們數(shù)組依次增大,所以不會(huì)同行,至于同列,我們可以推出a[i] = a[j]說(shuō)明同列
同一對(duì)角線我們知道是等腰直角三角形,我們可以退出行之差和列之差會(huì)相等,也就是說(shuō)fabs(a[i] - a[j]) = fabs(i - j);
注意這里的fabs函數(shù)是求絕對(duì)值
然后我們搜索,如果遇到當(dāng)前不滿足條件的情況下,就回退下,知道滿足條件為止,也就是說(shuō)的回溯思想
這里我用最簡(jiǎn)單最好理解的代碼實(shí)現(xiàn)一次,后面還會(huì)用簡(jiǎn)單的代碼和遞歸實(shí)現(xiàn)
代碼實(shí)現(xiàn):
#include<stdio.h> #include<math.h>int a[512] = {1};int check_
總結(jié)
- 上一篇: linux c之加入了加入原文件 ma
- 下一篇: 八皇后问题(二)