嘗試寫出視覺化的小演算法程式介紹:【c語言】用c語言實現漢諾塔自動遞迴演示程式
/*------------------------------------
project : 漢諾塔演示軟體;
language: c語言
author: 404name
疊64層需要開全視窗並且將字型大小調整為6
------------------------------------0-*/
#include
#include
int len, width, left, mid, right, time;
char map[80]
[1000];
int next[4]
[2]=
,,,}
;//上0下1左2右3;
int turn[2]
[3]=
,//a -> b b -> c a -> c 上右下};
//b -> a c -> b c -> a 上左下
void
gotoxy
(int x,
int y)
intinit()
}}gotoxy(0
,0);
//容易出現東西卡頓
for(
int i =
0; i <= width; i++
)return n;
}void
play
(int x,
int y)
}for
(i =
1, j = x; i <= width; i++)}
while(1
)else
for(k =
0; k < mid -
2; k++
)gotoxy
(j, i)
;sleep
(time)
;for
(k =
0; k < mid -
2; k++
) i = i + next[turn[turn_0]
[n]][0
];j = j + next[turn[turn_0]
[n]][1
];gotoxy
(j, i)
;sleep
(time)
;for
(k =
0; k < mid -
2; k++)}
n++;//改變方向;
if(i == tx && j == ty)
return;if
(turn_0 ==0)
for(k = mid -
3; k >=
0; k--
)else
for(k =
0; k < mid -
2; k++
)gotoxy
(j, i)
;for
(k =
0; k < mid -
2; k++
)sleep
(time)
; i = i + next[turn[turn_0]
[n]][0
];j = j + next[turn[turn_0]
[n]][1
];gotoxy
(j, i)
;for
(k =
0; k < mid -
2; k++
)printf
("%c"
, map[i]
[j + k]);
sleep
(time);}
}void
move
(int a,
int b,
int c,
char aa,
char bb,
char cc,
int n)
move
(a, c, b, aa, cc, bb, n -1)
;gotoxy(0
, width +1)
;printf
("from %c to %c"
, aa, cc)
;play
(a, c)
;move
(b, a, c, bb, aa, cc, n -1)
;gotoxy(0
, width +1)
;}intmain()
C語言 用C語言實現漢諾塔自動遞迴演示程式
1.變介面大小依照輸入遞迴數改變。2.漢諾塔自動移動演示。3.採用gotoxy實現流暢重新整理。4.保留文字顯示遞迴流程 部落格鏈結 輸入要遞迴的漢諾塔數目,在原來的漢諾塔基礎上新增move play函式展示遞迴,用next陣列儲存每種移動狀態。對應的從哪到哪可自動對應相應的移動方式自動移動。ini...
C 遞迴,漢諾塔
a為存放盤子的塔,b為目標塔,c為輔助塔 演算法分為三步 一 將a上n 1個盤子全部放到c塔上 二 將a上剩下的乙個盤子放到b塔上 三 將c塔上的盤子全部放到b塔上 注 不需要考慮如何移動n 1個盤子 遞迴過程 首先,將a上n 1個盤子放到c上,然後將a上剩下的乙個盤子放到b上,然後可以看成a為輔助...
漢諾塔 遞迴 c
1.遞迴終止條件 沒有安排好的盤子只剩乙個。此時將其從a,放到c 2.子問題 先將n 1個盤子從a經過中轉站c放到b,再將n 1個盤子從b經中轉站a放到c。3.cout的是從出發點到中轉站,n 1時cout從出發點到終點。輸入 盤子的數量n 輸出 每一步移動 輸入範例 2輸出範例 a b a c b...