Ayuda por favor, Pasar de C a C++
Publicado por Gabriel (1 intervención) el 09/01/2021 08:39:18
Buen día, por favor serian tan amables de ayudarme con este código, trate de pasarlo de c a c++pero no pude ya que al ejecutarlo me salen errores, muchas gracias de ante mano. Es el ejercicio de las ocho reinas y recién estoy tratando de aprender todo, igualmente agradecería sus conejos que tenga buen fin de semana.
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
// Problema de las N reinas
// ------------------------
// Algoritmo recursivo
//
// 0. Obviamente, colocaremos una reina en cada fila
//
// 1. Se coloca una reina en una casilla de su fila y,
// a continuación, se intentan colocar las reinas restantes.
//
// 2. Si las demás reinas no se pueden colocar con éxito,
// probamos a colocar la reina actual en otra columna.
//
// Caso base: Cuando no quedan reinas por colocar.
#include <stdio.h>
#include <stdlib.h>
// Constantes simbólicas
#define TRUE 1
#define FALSE 0
// Comprobar si una reina está bien colocada
// -----------------------------------------
// La reina de la fila i está bien colocada si no está
// en la columna ni en la misma diagonal que cualquiera
// de las reinas de las filas anteriores
//
// Parámetros
// fila - Fila de la reina cuya posición queremos validar
// reinas - Vector con las posiciones de las reinas
// n - Número de reinas
int comprobar (int fila, int reinas[], int n)
{
int i;
for (i=0; i<fila; i++)
if ( ( reinas[i]==reinas[fila] ) // Misma columna
|| ( abs(fila-i) == abs(reinas[fila]-reinas[i]) ) ) // Misma diagonal
return FALSE;
return TRUE;
}
// Colocación de una reina
// -----------------------
// Parámetros
// fila - Fila de la reina que queremos colocar
// reinas - Vector con las posiciones de las reinas
// n - Número de reinas
// Resultado
// TRUE si se coloca correctamente la reina
// FALSE si no se ha podido colocar la reina
int colocarReina (int fila, int reinas[], int n)
{
int ok = FALSE;
if (fila<n) {
// Quedan reinas por colocar
while ((reinas[fila]<n-1) && !ok) {
// Colocamos la reina en la siguiente columna
reinas[fila]++;
// Comprobamos si la posición
// de la reina actual es válida
if (comprobar(fila,reinas,n)) {
// Si es así, intentamos colocar
// las reinas restantes
ok = colocarReina (fila+1, reinas, n);
}
}
if (!ok) {
// Si no se han podido colocar las demás reinas
// con la reina actual donde está, la quitamos
reinas[fila] = -1;
}
} else {
// No quedan reinas por colocar (caso base)
ok = TRUE;
}
return ok;
}
// Mostrar el tablero con las reinas
// ---------------------------------
// Parámetros:
// reinas - Vector con las posiciones de las distintas reinas
// n - Número de reinas
void mostrarTablero (int reinas[], int n)
{
int i,j;
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
if (reinas[i]==j)
printf("#");
else
printf("-");
}
printf(" %d %d\n",i,reinas[i]);
}
}
// Mostrar información acerca del uso del programa
// -----------------------------------------------
// Parámetro:
// programa - Nombre del programa
void mostrarAyuda (char *programa)
{
printf("Uso del programa:\n");
printf("\n");
printf(" %s <n>\n", programa);
printf("\n");
printf("donde <n> es el número de reinas que deseamos colocar (un mínimo de 4).\n");
printf("\n");
}
// Programa principal
// ------------------
void main (int argc, char *argv[])
{
int *reinas; // Vector con las posiciones de las reinas de cada fila
int nreinas; // Número de reinas
int i; // Contador
// Leer número de reinas
// (parámetro del programa)
nreinas = -1;
if (argc==2)
nreinas = atoi(argv[1]);
// Colocar las reinas en el tablero
if (nreinas>0) {
// Crear vector dinámicamente
reinas = (int*) malloc ( nreinas*sizeof(int) );
// Inicializar vector:
// (inicialmente, ninguna reina está colocada)
for (i=0; i<nreinas; i++)
reinas[i] = -1;
// Colocar reinas (algoritmo recursivo)
colocarReina(0,reinas,nreinas);
// Mostrar resultado
mostrarTablero(reinas,nreinas);
// Liberar memoria
free (reinas);
} else {
mostrarAyuda(argv[0]);
}
}
Valora esta pregunta


0