精華區beta Programming 關於我們 聯絡資訊
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 1609死會寢 wrote: > 是做出一個NP_hard的問題嗎? > 最近剛學到NP,可應該還沒紮好根 > 可否請版上的強者幫忙? 如果你仔細去算複雜度, 光算 n! 本身就是 NP_hard (EXPTIME) 輸入 n 個 integer, 去排序, 輸出排序好的 n 個數, 是 O(n log n) 也就是在 P 但是輸入 n, 印出 1~n, 是在 EXPTIME 橘 向日葵 wrote: > 其實200皇后應該就可以搞死一堆電腦了吧XD > 類似這類目前只能以Back-tracking解題(而且sub-solution又沒重複)的問題 > 有一大票都是問題描述簡單 > 但是問題本身缺乏設計出快速求解的演算法的要素 > 所以目前存在於世界上的求正確解演算法都快不起來 > 遇到這類問題 > 頂多只能在Back-tracking的基礎上加些要素,減少搜尋解空間 > 不然就是用一些近似演算法在合理時間求得接近最佳解的解 n-queen problem 有兩種 一種是只要產生一組解, 這樣200就可以算 #include <iostream> using namespace std; int main(void) { int N,c,i,j; cin >> N; c=N%12; if (N!=1 && N<=3) { cout << "none" << endl; return 0; } if (c==3 || c==9) for (i=2;i<=N;i+=2) cout << (i+2<=N?i+2:2) << " "; else for (i=2 ; i<=N ; i+=2) cout << i << " "; if (c==8) for (i=1,j=2;i<=N;i+=2,j=-j) cout << (i+j<=N?i+j:i) << " "; else if (c==2) {cout << "3 1 "; for (i=1;i<=N;i+=2) cout << i << " "; if (N>=5) cout << "5 "; } else if (c==3 || c==9) { for (i=5;i<=N;i+=2) cout << i << " "; if (N>=1) cout << "1 "; if (N>=3) cout << "3 "; } else for (i=1;i<=N;i+=2) cout << i << " "; cout << endl; return 0; } 另外一種是要輸出所有解, 甚至也不用輸出所有解, 只要輸出有幾組解, 就夠頭大了... - -- PaulLiu(劉穎駿) E-mail address:PaulLiu.bbs@bbs.cis.nctu.edu.tw -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) Comment: Using GnuPG with Debian - http://enigmail.mozdev.org iD8DBQFDvlEyoQj7xTSiaUYRAsDFAJ9p3zUHccynWnQquzxyYti8xwQu5wCfd03M QVx6N0DK7JXhwvXw0pCQ/CY= =UKFZ -----END PGP SIGNATURE-----