作者q0300768 (NANA真好看~^^)
看板C_and_CPP
標題[問題] 河內塔問題
時間Sat Jul 23 14:37:11 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
dev c++
問題(Question):
如下圖,執行到(5)後就不會再移動了,不知道問題出在哪?
1
2 => 2 => => 1 => 1
3 3 1 321 32 23
=== === === === ===
(1) (2) (3) (4) (5)
程式碼(Code):(請善用置底文網頁, 記得排版)
#include<iostream>
#include<iomanip>
using namespace std;
int n=3,mid,height[3]={3,0,0},s[3][3],nnum=n;
void honai(int start,int end,int num) //從start搬到end,共搬num個
{
if(num>1)
{ if(start+end==1){mid=2;}
else if(start+end==2){mid=1;}
else if(start+end==3){mid=0;}
nnum=num;
num--;
honai(start,mid,num);
honai(start,end,nnum-num);
honai(mid,end,num);
}
else
{
height[end]++;
s[n-height[end]][end]=s[n-height[start]][start];
s[n-height[start]][start]=0;
height[start]--;
for(int i=0;i<n;i++)
{ for(int j=0;j<n;j++)
{ (s[i][j]==0?(cout <<"|"):(cout << s[i][j]));
}
cout << endl;
}
cout << "===" << endl << endl;
}
}
int main()
{ int i;
for(i=0;i<n;i++)
{ s[i][0]=i+1;
}
for(int i=0;i<n;i++)
{ for(int j=0;j<n;j++)
{ (s[i][j]==0?(cout <<"|"):(cout << s[i][j]));
}
cout << endl;
}
cout << "---" << endl << "---" << endl << endl;
honai(0,2,n);
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.84.0.208
→ firejox:.... 07/23 15:09
→ firejox:let nnum declared in honai... 07/23 15:20
→ firejox:n-height[]... 07/23 15:26
→ firejox:ignore the least one 07/23 15:29
搞定了 把mid定義在函數內就好了
※ 編輯: q0300768 來自: 219.84.0.208 (07/23 15:42)
→ firejox:the mid is useless.just try (start+end)^3 ... 07/23 15:50
→ firejox:or 3-(start+end) ... 07/23 15:50
感謝!! 沒注意到可省略!
※ 編輯: q0300768 來自: 219.84.0.208 (07/23 15:53)
→ Favonia:要小心n不一定會比nnum先初始化,寫在最外面會很麻煩。 07/23 19:45
→ Favonia:請直接寫nnum=3或是在其他函式裡面寫nnum=n 07/23 19:45
→ Favonia:(啊對不起我上面是在說 C 不是 C++, 請忽略 orz) 07/23 20:01
→ Favonia:如果是 C++, 目前程式是安全的,但還是建議不要這樣寫 :P 07/23 20:03
→ Favonia:C++ 規則有一點多,要講清楚有點麻煩 orz 07/23 20:04