2012-11-03 44 views
2

我們有一個尺寸爲NxN的二維數組。我們選擇任意一行並將其左右移動。就好像一排是「3 4 5 6」,我們可以將這個單位向右移動一個單位到「6 3 4 5」。所以我必須使用如上所示的行移動從給定數組打印所有可能的二維數組。通過移動行生成二維數組的所有可能組合

它變得非常棘手的組合,我嘗試了迭代,但對我來說變得太複雜了,所以我認爲應該更容易,如果我們遞歸解決這個問題,但我無法完成問題。我在換擋時沒有問題,但是在產生所有可能的組合時遇到問題。

This是我發現有關但不適用於我自己的問題。

回答

1

這似乎是你可以用嵌套for循環做的事情。假設你有一個可以在你的所謂rowShift二維數組(的rowNum,rowOffset,& theArray)移動一排功能...

int i1,i2,i3,i4; 
for(i4=0; i4 <= 3; ++i4) { 
    for(i3=0; i3 <= 3; ++i3) { 
     for(i2=0; i2 <= 3; ++i2) { 
      for(i1=0; i1 <= 3; ++i1) { 
       rowShift(0, i1, theArray); 
      } 
      rowShift(1, i2, theArray); 
     } 
     rowShift(2, i3, theArray); 
    } 
    rowShift(3, i4, theArray); 
} 

如果你想節省每一個組合,你將需要某種形式的saveState和的()函數在循環中的每個rowShift調用之後。

我想你也可以做這個遞歸函數。

我很好奇這是用於什麼 - 如果你不介意分享。看起來像一個有趣的問題。 :)

+0

好的,我會告訴你它是否有用。它是http://opc.iarcs.org.in/index.php/problems/PUZZLE從比賽中獲得的一部分,如果你喜歡比賽,你可以下午我,我喜歡解決比賽問題:) –