2013-10-02 41 views
-5

嗨,我有努力下發展的代碼,會爲這個難題的工作求解 我有5種元素各陣列來回跳躍算法謎題解決

a[] = {1,1,0,2,2}; 
b[] = {2,2,0,1,1}; 

我的程序是假設步驟2個的整數數組問題按步驟重新排列數組a到數組b中,並比較它們是否匹配。

解決的規則是:整數1只能向右移動,整數2只能向左移動,0作爲1跳過2的持續點,反之亦然;

基本解決在紙上這個難題的方法是:

a b c d e 
1 1 0 2 2 - >starting positiong 
1 0 1 2 2 - >b moves to c therfore b is now vacated 0 
1 2 1 0 2 - >d can jump over c because they are opposites so b = d 
1 2 1 2 0 - > e moves over to the vacated d 
1 2 0 2 1 - > c can jump over d to e because e is vacated 
0 2 1 2 1 
2 0 1 2 1 
2 2 1 0 1 
2 2 0 1 1 = b[] 

我寫的代碼只是聲明數組,但我不知道如何解決任何幫助表示讚賞。

回答

2

我在這裏看到兩種可能性。如果謎題與示例一樣簡單,則可以先遞歸解決深度問題。對於每種狀態,您都可以評估可以用來制定步驟的規則。你全部嘗試,遞歸地調用你的solve函數來嘗試下一個級別。評估你應該記住找到最短路線的步驟。

如果事情變得更加複雜,您可以查看Minimax算法。如果記憶爲我服務,則需要一些方法來評估不同的狀態,例如通過正確位置的項目數量。你也可以設計啓發式來截斷註定要失敗的可能性。

祝你好運!