Implemetnacija u C-u
1. Algoritam
#include <stdio.h>
#include <stdlib.h>
#define ALLO(x) { if((x = (int *)malloc((n+3) * sizeof(int))) == NULL) {\
fprintf(stderr, #x " Dodela memorije nije uspela!\n"); exit(1); }}
main()
/*========================*/
{
int i, *a, *b, *c, *p, *fr, *to, *sp, n, n1, n2;
n = 5;//broj diskova
n1 = n+1;
n2 = n+2;
ALLO(a)
ALLO(b)
ALLO(c)
a[0] = 1; b[0] = c[0] = n1;
a[n1] = b[n1] = c[n1] = n1;
a[n2] = 1; b[n2] = 2; c[n2] = 3;
for(i=1; i<n1; i++) {
a[i] = i; b[i] = c[i] = 0;
}
fr = a;
if(n&1) { to = c; sp = b; }
else { to = b; sp = c; }
while(c[0]>1) {
printf("Pomeri disk %d sa %d na %d\n", i=fr[fr[0]++], fr[n2], to[n2]);
p=sp;
if((to[--to[0]] = i)&1) {
sp=to;
if(fr[fr[0]] > p[p[0]]) { to=fr; fr=p; }
else to=p;
} else { sp=fr; fr=p; }
}
}
1. Algoritam
.
.
.
fr = a;
if(n&1) { to = c; sp = b; }
else { to = b; sp = c; }
while(*c > 1) {
if((to[--(*to)] = fr[(*fr)++])&1) {
p=sp; sp=to;
if(fr[*fr] > p[*p]) { to=fr; fr=p; }
else to=p;
} else {
p=sp; sp=fr; fr=p;
/* (call to) tower visualization code */
to[--(*to)] = fr[(*fr)++];
p=sp; sp=to;
if(fr[*fr] > p[*p]) { to=fr; fr=p; }
else to=p;
}
/* (call to) tower visualization code */
}
}