-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHanoi ATUALIZADO COM TODAS AS FUNÇÕES
More file actions
138 lines (92 loc) · 2 KB
/
Copy pathHanoi ATUALIZADO COM TODAS AS FUNÇÕES
File metadata and controls
138 lines (92 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <stdio.h>
#include <stdlib.h>
int numDiscos=8;
void imprime( int *tab, int fil, int col, int ultNum )
{
/*
Precondición:
*tab Ponteiro
fil linhas
col colunas
disc discos
ultNum numero maior
*/
int f, c;
int i, esp;
for( c=col-1; c >= 0; c-- )
{
for( f=0; f < fil; f++ )
{
esp = ( ultNum - tab[col*f+c] )/2;
for( i=0; i < esp; i++ )
printf( " " );
for( i=0; i < tab[col*f+c]; i++ )
printf( "*" );
for( i=0; i < esp; i++ )
printf( " " );
printf( "\t" );
};
printf( "\n" );
}
}
void move( int *tab, int fil, int col, int ultNum, int filOrig, int filDest)
{
/*
*tab ponteiro
fil linha
col coluna
disc discos
ultNum numero maior
filOrig fila de origem numero/disco
filDest fila de destino numero/disco.
*/
int cO=col-1, cD=col-1;
while( cO >= 0 && tab[col*filOrig+cO] == 0 )
{
cO--;
};
if( cO < 0 )
cO = 0;
while( cD >= 0 && tab[col*filDest+cD] == 0 )
{
cD--;
};
tab[col*filDest+cD+1] = tab[col*filOrig+cO];
tab[col*filOrig+cO] = 0;
imprime( tab, fil, col, ultNum );
};
void hanoi( int *tab, int fil, int col, int disc, int ultNum, int O, int A, int B , int D)
{
if( disc==1 )
{
move(tab, fil, col, ultNum, O, D);
if(col<=5); else if(col<=10) ; else if(col<=15); else if(col>15); else if(col<=20); else if(col>20);
}
else
{
hanoi( tab, fil, col, disc-1, ultNum, O, B, D, A);
move( tab, fil, col, ultNum, O, D );
if(col<=5); else if(col<=10) ; else if(col<=15); else if(col>15);
hanoi( tab, fil, col, disc-1, ultNum, A, O, B, D);
}
};
main()
{
int fil=4, col, *tablero = NULL;
int f, c, disc=1, ultNum;
col=numDiscos;
tablero = (int *)malloc( sizeof(int)*fil*col);
//resta as torres
for( f=0; f < fil; f++ )
for( c=col-1; c >= 0; c-- )
if( f==0 )
{
tablero[col*f+c] = disc;
disc+=2;
}
else
tablero[col*f+c] = 0;
ultNum = disc;
imprime( tablero, fil, col, ultNum );
hanoi( tablero, fil, col, col, ultNum, 0, 1, 2, 3);
};