http://en.wikipedia.org/wiki/Brute_force_search算法
暴力搜索的算法步驟:測試
1)第一個解做爲當前解。spa
2)處理當前解(若是知足條件則輸出,不然忽略)。code
3)生成下一個解做爲當前解,繼續2下去。blog
因此也將稱其爲窮舉或者生成-測試。尤爲是名字生成-測試更能反映其算法結構。ip
即:first(); do { } while (next());get
問題:給出一些數目,能夠用加減乘除計算結果,求一些知足條件的結果。例如算24點。數學
簡化:生成+-*/的全部可能計算方式。(貌似不是數學中的排列,也不是數學中的組合)it
求解:暴力搜索法。io
// 0=>+, 1=>-, 2=>*, 3=>/ int op[100]; void first(int n) { for(int i = 0; i <= n-1; i++) { op[i] = 0; } } bool last() { if (op[0] == 4) { return true; } else { return false; } } bool next(int n) { if (last()) { return false; } int i = n-1; op[i]++; while (op[i] == 4 && i >= 1) { op[i] = 0; op[i-1]++; i--; } while ( i>=0 && op[i]==0 ) { i--; op[i] = (op[i]+1)%4; } return true; } bool valid() { if (last()) { return false; } else { return true; } } void output(int n) { for(int i = 0; i <= n-1; i++) { switch (op[i]) { case 0: cout << "+"; break; case 1: cout << "-"; break; case 2: cout << "*"; break; case 3: cout << "/"; break; default: cout << "error"; break; } } cout << endl; } void brute_force_search(int n) { first(n); int count = 0; do { if (valid()) { count++; output(n); } } while(next(n)); cout << count << " solutions found!" << endl; }