一般河內塔的作業模式:
1 | |
2 | |
-------------------------------------
A B C
=========================
| | |
2 1 |
-------------------------------------
A B C
=========================
| | |
| 1 2
-------------------------------------
A B C
=========================
| | 1
| | 2
-------------------------------------
A B C
=========================
(1)n-1 從A移到B
(2)n 從A移到C
(3)n-1 從B移到C
實作如下:
++++++++++++++++++++++++++++++++++++++
void hanoi (int num, char start, char temp, char end )
{
if( num > 0 )
{
hanoi ( num-1 , start , end , temp ); /*n-1 從A移到B */
printf("%d %c -> %c \n" , num, start , end ); /*n 從A移到C */
hanoi ( num-1 , temp , start , end); /* n-1 從B移到C*/
}
}
int main()
{
hanoi ( 4 , 'A' , 'B' ,'C' ); /*四個盤子,以A為起始柱,以C為目標柱*/
return 0;
}
++++++++++++++++++++++++++++++++++++++
若河內塔的作業模式 必須不能跨柱子:
1 | |
2 | |
-------------------------------------
A B C
=========================
| | |
2 1 |
-------------------------------------
A B C
=========================
| | |
2 | 1
-------------------------------------
A B C
=========================
| | |
| 2 1
-------------------------------------
A B C
=========================
| 1 |
| 2 |
-------------------------------------
A B C
=========================
| | |
1 2 |
-------------------------------------
A B C
=========================
| | |
1 | 2
-------------------------------------
A B C
=========================
| | |
| 1 2
-------------------------------------
A B C
=========================
| | 1
| | 2
-------------------------------------
A B C
=========================
(1)n-1 從A移到B 再 從B移到C
(2)n 從A移到B
(3)n-1 從C移到B 再 從B移到A
(4)n 從B移到C
(5)n-1 從A移到B 再 從B移到C
+++++++++++++++++++++++++++++
實作如下:
++++++++++++++++++++++++++++++++++++++
void hanoi (int num, char start, char temp, char end )
{
if( num > 0 )
{
hanoi ( num-1 , start, temp, end ); /*n-1 從A移到B */ /*n-1 從B移到C */
printf("%d %c -> %c \n" , num, start , temp ); /*n 從A移到B */
hanoi ( num-1 , end , temp, start ); /*n-1 從C移到B */ /*n-1 從B移到A */
printf("%d %c -> %c \n" , num, temp , end ); /*n 從A移到B */
hanoi ( num-1 , start , temp ,end ); /*n-1 從A移到B */ /*n-1 從B移到C */
}
}
int main()
{
hanoi ( 4 , 'A' , 'B' ,'C' ); /*四個盤子,以A為起始柱,以C為目標柱*/
return 0;
}
留言列表