Re: [問題] 請問一下我的八皇后程式

看板C_and_CPP (C/C++)作者 (下班後才下棋)時間15年前 (2009/12/13 23:14), 編輯推噓11(11010)
留言21則, 15人參與, 最新討論串3/3 (看更多)
※ 引述《pocernld (時間像流水般過去了...)》之銘言: : 遇到的問題: (題意請描述清楚) : 我寫了一個八皇后程式,但是編譯以後執行卻完全沒東西, : 可否請板上各位高手幫我看一下,謝謝 : 希望得到的正確結果: : 八皇后的解 : 程式跑出來的錯誤結果: : 完全不會動... : 開發平台: : Dev-c++ 4.9.9.2 : 有問題的code: (請善用置底文標色功能) code 麻煩下次用置底的那幾個貼 code 網頁貼 貼在 BBS 上閱讀不便 真的有人想 copy 下來幫忙看問題在哪裡, 也會很麻煩 : 補充說明: : 說一下我的想法 : 1.假設皇后放在一個格子之中,則他可以吃到的格子數目全部加起來 : 寫在那一個格子裡頭,然後去求所有格子的最小值,把皇后放在那個最小值裡面 : 然後把它可以吃掉的格子設為1,再去求剩下不能吃掉的格子的最小值, : 然後再放第二個皇后,以此類推下去,放皇后的方法就是那些是最小值的格子 : 一個一個去試,如果走到死路的話,就把最後一次放皇后的格子的格子的皇后拿掉 : ,重新設定最小值,再把皇后放在下一個格子,一直到找到解為止 你是第一個在版上貼出自己的 code 之後 我想了兩天才知道要跟你講什麼的人... orz 即使有很多人小小揶揄了一下 不過我覺得還是需要認真評論一下這件事 首先, 看起來你是個新手 對新手而言, 我對你的做法/想法很讚賞 雖然你的做法是很基本的 greedy search 但這種方法在我還是新手時 是無法找出完備的構想並且實作出來 寫程式其實可以非常粗略的分成兩個部份 第一個是想出好的步驟或解法 (或稱演算法) 第二個則是依照你想好的解法去寫出對應的程式碼 通常上面兩個的能力是可以分開訓練的 第一個需要的是邏輯推理和數學能力 第二個則是一開始需要一些基本入門的學習 接著就是大量的實作經驗和閱讀它人的程式 甚至是看書來增進程式寫作技巧 當你的實作能力還不夠成熟的時候 就會發現有些很簡單的概念或想法 你都只能寫出自己都很難以理解的程式 就好像如果一個人英文的辭彙背的不是很多 他就得要比手劃腳才能說出他想表達的意思 基本上你所遇到的問題就是這樣了 但別緊張, 每個人都會經歷過這一段 大部份人看到這程式會笑, 多半也都是會心一笑 總之, 你需要按部就班的練習 可能的話找個比較有經驗的人幫你忙 在你有想法, 要開始實作之前討論一下 我相信經驗多了, 慢慢就會得心應手了 至於 8queen 的問題 你的方法不錯, 但是你可以進一步想一想 雖然每次挑吃掉最少格子的 queen 來放 等之後所有擺法都不行之後才去試次少的 但如果運氣不好, 某一組解是需要放在吃掉最多格的那格 你還是得試過所有可以放的位置 既然如此, 我們其實可以不管次序 只要試過所有可以放的位置就好 (就是去試所有不會跟之前放過的 queen 打架的位置) 是不是會把問題又簡化了許多 ? 你可以試試看這種比較簡化的解法能不能實作的出來 其實十六層迴圈的解法並沒有對錯問題 只是你自己應該有感覺到 找哪裡寫錯會找得非常痛苦 而且如果題目改成找 10 queen 問題 你的程式又需要大改版 所以一般來說我們會用一些技巧來避免這種寫法 這也是往後繼續進步所需要努力的方向 一個程式能夠寫得越簡單越容易懂越好 最好就是隨便一個入門者來看都不會太費力就能看得懂 這樣未來如果有機會寫大系統時要合作也會比較輕鬆 : 麻煩各位大大解答了 : 小弟我已經熬夜兩天debug不出來... : 感激不盡... 最後說一下, 8 queen 已經算稍稍進階的題目了 很多大學、碩士畢業的人都不見得能一次寫到好 但我不知道你目前學習到哪 所以也不知道給什麼樣的提示對你比較有幫助 通常解 8 queen (或 N queen) 用的方法基本是 DFS 如果你還有興趣的話可以 google "8 queen" 或是 "depth-first search" 看點資料吧 -- 有時候,遺忘,是令人快樂的。什麼時候?當然是有人傷了你的心的時候。  存心傷你的那個人,固然是故意和你過不去,但是被傷了心而耿耿於懷的你  ,卻是和自己過不去了。所以,記性不好的人,通常會是比較快樂的人,也  是比較不容易被擊倒的人。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.50 ※ 編輯: ledia 來自: 140.112.30.50 (12/13 23:19) ※ 編輯: ledia 來自: 140.112.30.50 (12/13 23:22)

12/13 23:26, , 1F
ledia大真的很佛心,一定要推一下!
12/13 23:26, 1F

12/13 23:36, , 2F
推一下l大, 說得真好:)
12/13 23:36, 2F

12/13 23:39, , 3F
好佛
12/13 23:39, 3F

12/13 23:40, , 4F
great
12/13 23:40, 4F

12/14 00:37, , 5F
推 感謝大大指教 我再試試看...
12/14 00:37, 5F

12/14 04:38, , 6F
推l大
12/14 04:38, 6F

12/14 11:20, , 7F
推 不過如果code很雜亂可是效率是很高的話 也有可能要犧牲..
12/14 11:20, 7F

12/14 12:18, , 8F
給樓上, 如果你這輩子真的會遇過這種情形, 那你已經是大師了
12/14 12:18, 8F

12/14 12:19, , 9F
大部份情況, 即使在最佳化之後, 都是能夠寫得很好讀的
12/14 12:19, 9F

12/14 12:19, , 10F
一定得寫得很難看懂的, 不容易遇到, 現在編譯器都這麼強了
12/14 12:19, 10F

12/14 12:20, , 11F
更何況, 軟體開發上遇到的問題, 也是可以用硬體來解決
12/14 12:20, 11F

12/14 12:21, , 12F
比如說讓多台機器來一起算... 我認為可讀性重要得多就是了:)
12/14 12:21, 12F

12/14 18:44, , 13F
推熱心~~
12/14 18:44, 13F

12/14 18:53, , 14F
推~
12/14 18:53, 14F

12/14 23:29, , 15F
可讀性是很重要的東西 不然時日一久 東西就會變回廢物
12/14 23:29, 15F

12/15 04:28, , 16F
超熱心
12/15 04:28, 16F

12/15 04:55, , 17F
推~
12/15 04:55, 17F

12/15 21:49, , 18F
當初我也跟原PO寫了一樣的程式...
12/15 21:49, 18F

12/15 21:49, , 19F

12/15 21:50, , 20F
現在還是沒進步..這代表我需要補..很多的演算法..
12/15 21:50, 20F

12/16 13:10, , 21F
寫的真好!!! 我就是用十六層迴圈..超痛苦...真的..
12/16 13:10, 21F
文章代碼(AID): #1B9GJa7d (C_and_CPP)
文章代碼(AID): #1B9GJa7d (C_and_CPP)