引用:
Acute寫到:
呵呵... sorry, 是我記錯了 ^^"
橫直斜都不能放
sfredr... 你那個程式是你寫的吧?
嚴重不對哩 @_@
至少要8x8 的二維陣列, 才有辦法記錄一個棋盤
你只用一維陣列... 是無法記錄的喔
還有, 你的題目是要擺出一個? 還是求出所有解?
兩個相差很多很多哩 @_@
Acute.
不過我跑出來了說Orz...是跑出所有的解...
我用上面的解去玩八皇后的程式都ok說..剛好放的進去
那個一維陣列是用來記錄棋子放在y軸上的第幾個...
之所以沒有x軸是因為我一行一行去跑...所以跑的有點慢...
因為整個棋盤上的y軸的格子我全部都會放上去...再去檢查有沒有問題...
下面是大概的流程
將陣列rows初始為一儲存八個元素之陣列,進入主程式後開始for迴圈,先將第0個位置,也就是棋盤上的(1,1)佔據,然後開始找第二排的旗子可放之處,也就是棋盤上的(1,2)開始放棋,以此類推,跑到if判斷式後進入Valid函數開始檢查,首先檢查rows[ i ] == rows[j],若等式成立代表兩個棋子在同一y軸上,固直接傳回0的值,再找尋下一個棋子擺放處是否正確;若rows[ i ] == rows[j]等式不成立,則將rows[ i ]-rows[j]的值傳給bevel,此bevel變數代表右下角的斜邊是否有擺放棋子,若等於j-i則代表在目前的棋子的斜邊上有棋子占據,所以傳回0,若小於0則代表斜邊目前沒有棋子占據,固將傳回1,則int main()中的if條件式成立,進入void answer(int rows[])將目前的解法印出。
各列之值代表棋子所擺放之y軸,如:1 5 8 6 3 7 2 4
則代表(1,1)(2,5)(3,8)(4,6)(5,3)(6,7)(7,2)(8,4)各放上一顆棋子。
[ i ]會變斜體..所以我多空一格
[sfredr 在 2005-4-11 03:59 AM 作了最後編輯]