蛇形魔方:
這個玩具是要拼成正方形:
蛇形魔方很簡單,不費吹灰之力即可找到解法,也很容易想明白是唯一解。
這裡我用深度優先搜尋演算法求解。
思路和**都很簡單,就是個簡單的深度優先搜尋,直接上**:
#include#includeusing namespace std;
const int maxdeep = 17;
const int len[maxdeep] = ;
#define n 3 //3*3*3
#define m n+2
int board[m][m][m];//座標分量的取值範圍是1-n,0和n+1作為無效邊界
const int dx[6] = ;//(dx[i],dy[i],dz[i])是第i個方向的方向向量
const int dy[6] = ;//6個方向分別是上下後前右左
const int dz[6] = ;
const string s[6] = ;
int ans[maxdeep];
void init()
bool visit(int sx, int sy, int sz, int direc, int deep)
x -= dx[direc], y -= dy[direc], z -= dz[direc];
bool flag = false;
if (le == 0)for (int dir = 0; dir < 6; dir++)
while (le < len[deep] - 1)
return flag;
}int main()
board[i][j][k] = 0;
} return 0;
}
其中,dx,dy,dz用來描述方向向量,在我的很多棋類**中都有講到這個flat技術。
由於6個方向的對稱性,可以不妨設第一步是往上。
輸出結果:
上後下右後左上右前下後左後右前上後
1 1 1
上前下右前左上右後下前左前右後上前
1 3 1
上後下左後右上左前下後右後左前上後
3 1 1
上前下左前右上左後下前右前左後上前
3 3 1
不難發現,雖然輸出了4個解法,但是因為旋轉對稱性,實際上就是唯一解。
計算機鼓輪設計(DFS)
四個觸頭a b c d將獲得一定的資訊。因此,鼓輪的位置可用二進位制訊號表示。試問如何選取鼓輪16個部分的材料才能使鼓輪每轉過乙個部分得到乙個不同的二進位制訊號,即每轉一周,能得到0000到1111的16個數。列印節點順序 101 102103 intmain 104111 node num pow...
計算機求解數獨問題S
演算法的樂趣 中數獨的求解 sudoku.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std define skd row limet 9 define skd col limet skd row limet ...
計算機基礎 計算機的構成
也許有人認為技術人員不需要硬體或計算機底層原理的知識。因為這個層面的一些處理往往已經封裝好,不需要重新進行規劃。然而,事實並非如此,系統構建於硬體與作業系統之上,我們應該對計算機底層原理有一定認識,以避免在研發過程中導致的一系列安全與效能問題。計算機的發展經歷了電子管和電晶體時代 積體電路時代 中小...