私はハノイの塔問題の変種を解こうとしています.3つのペグがあり、同じ高さとディスクサイズの2つの塔があります. タスクは、2 つのタワーを交換することです。
私の解決策は、両方のタワーを積み重ねて大きなタワーにし(同じサイズのディスクを積み重ねることができます)、それらを再び分割します(もちろん、ペグを切り替えます)。
両方のタワーを積み重ねることはできましたが、アルゴリズムを逆にしてそれらを再び分割することはできません。
この状況では、それぞれ 3 つのディスクを持つ 2 つのタワーがあります。左側に 1 つ、中央に 1 つ。私のアルゴリズムの後、右側のペグに 6 つのディスクを備えた 1 つのタワーがあります。
私のアルゴリズムは次のとおりです:(私はJavaを使用しています)
public void solve() {
combineTo(3, 0, 1, 2); // parameters: (height, from, to, temp)
splitUp(?, ?, ?, ?);
}
private void moveDisk(int from, int to){
// here are also a few other things going on but
// that doesn't matter in this case
System.out.println("from: "+from+" - to: "+to);
}
private void moveTower( int i, int from, int to, int temp) {
if (i == 0) return;
else{
moveTower( i-1, from, temp, to );
moveDisk(from, to);
moveDisk(from, to);
moveTower( i-1, temp, to, from );
}
}
private void combineTo( int i, int from, int to, int temp ){
if (i==0) return;
else{
combineTo(i-1, from, to, temp);
moveDisk(to, from);
moveTower(i-1, temp, to, from);
moveDisk(from, temp);
moveDisk(from, temp);
moveTower(i-1, to, temp, from);
}
}
private void splitUp( int i, int from, int to, int temp ){
if (i==0) return;
else{
???
}
}
splitUp
では、メソッドでこれを元に戻すにはどうすればよいですか?