Estoy buscando código en lenguaje C con 500-600 líneas. También puedes copiar el código de otra persona.
Es difícil encontrar un código de 500 líneas...
Sólo hay uno con más de 300 líneas, sobre el problema matemático de un empresario cruzando el río
#include lt ;stdio.hgt;
#include lt;stdlib.hgt;
#define maxloop 100 //Número máximo de capas, ajusta automáticamente el valor para diferentes métodos de extensión
#define pristnum 3
#define esclavonum 3
struct SPQ
{
int sr , pr; //barco El número de comerciantes y sirvientes que hacen un viaje de ida y vuelta a la margen derecha del río
int sl, pl //El número de comerciantes y sirvientes que hacen un viaje de ida y vuelta a la margen izquierda del río
int ssr, spr ; //El número de personas en el barco al regresar (al ir de izquierda a derecha)
int sst, spt / /El número de personas en el barco al ir (al ir de derecha a izquierda)
int loop; //El número de capas donde se encuentra este nodo
struct SPQ *upnode; , *nextnode; // La dirección del nodo principal de este nodo y el siguiente nodo en la misma capa
}spq
int loopnum; expansions
int opennum; //Registra el número de nodos expandidos
int unopenednum;// Registra el número de nodos a expandir
int resultnum;
struct SPQ *abierto;
struct SPQ *oend;
struct SPQ * sin abrir
struct SPQ *uend; >
struct SPQ *resultado;
void start();
void releasemem()
void showresult(); p>void addtoopened(struct SPQ *ntx);
int search();
void goon(
int stretch(struct SPQ* ntx)
void recorder();
void main()
{
int flag //Marca si la expansión fue exitosa;
for( ; ; )
{
iniciar();
bandera = buscar ();
if(flag == 1)
{
recorder();
releasemem();
showresult(); /p>
goon();
}
else
{
printf("No se puede encontrar una solución que cumple las condiciones");
liberación
mem();
goon();
}
}
}
void iniciar()
{
int x;
elección de caracteres
uend = sin abrir = (struct SPQ*)malloc(sizeof(spq) );
if(uend==NULL)
{
printf("\n¡No hay suficiente memoria!\n");
salir(0);
}
nodo abierto = 1;
número abierto = 0; ; //Guarda la dirección del nodo principal en una lista vinculada
unopened -gt; nextnode = unopened
unopened sr = esclavonum; > sin abrir -gt; pr = pristnum;
sin abrir -gt;
sin abrir -gt; sst = 0;
sin abrir -gt; spt = 0;
sin abrir -gt; ssr = 0;
sin abrir -gt; /p >
sin abrir -gt; loop = 0;
printf("Título: Supongamos que n empresarios y m sirvientes llegan al río y planean tomar un bote desde la orilla derecha a la orilla izquierda .\ n");
printf("El barco tiene una capacidad de carga para dos personas. Si en algún momento el número de sirvientes excede el número de comerciantes, el número de sirvientes\n");
printf(" El empresario será asesinado.
¿Cómo pueden usar este barco para transportar a todos de forma segura a través del río?\n");
printf("\nLos valores predeterminados de n y m son 3\n");
for(;;)
{
printf("\n¿Quieres modificarlo? (Y/N)");
scanf ("s",amp;choice);
Choice=toupper(choice);
if(choice=='Y')
{ p>
p>
printf("\nIngrese el número de comerciantes");
for(;;)
{
scanf("d", amp;x);
if(xgt;0)
{
sin abrir -gt; pr = x;
break;
}
else printf("\n¡El valor de entrada debe ser mayor que 0!\nVuelva a ingresar");
}
printf("\nPor favor ingrese el número de servidores");
for(;;)
{
scanf( "d",amp;x);
if(xgt; 0)
{
sin abrir -gt = x; p> break;
}
else printf("\n¡El valor de entrada debe ser mayor que 0!\nVuelva a ingresar"); /p>
romper;
}
if(choice=='N')romper;
}
}
int search()
{
int flag;
struct SPQ *ntx //Proporciona un puntero al nodo; ser expandido
for(; ; )
{
ntx = sin abrir //Extrae el frontal de la lista vinculada que se expandirá
if(ntx-gt; loop == maxloop )
return 0;
addtoopened(ntx); //Agrega ntx a la lista enlazada extendida y elimina este nodo de la lista enlazada extendida
flag = stretch(ntx); //Extiende ntx y devuelve -1, 0, 1
if(flag == 1)
devolver 1;
}
}
int estiramiento(struct SPQ *ntx)
{
int fsr, fpr; //Número de personas en la margen derecha
int fsl, fpl; //Número de personas en la margen izquierda
int sst, spt; de personas en el barco al salir
int ssr , spr; //El número de personas en el barco al regresar
struct SPQ *newnode;
for (st = 0; s
st lt; = 2; sst) //Discute diferentes posibilidades y determina si cumplen con las condiciones
{
fsr = ntx -gt;
fpr = ntx -gt; pr;
fsl = ntx -gt;
fpl = ntx -gt; ; = fsr) & (( 2 - sst) lt; = fpr))//Cumplir con el límite de personas
{
spt = 2 - sst;
fsr = fsr - sst;
fpr = fpr - spt;
if((fpr == 0) amp; amp; (fsr == 0))/ / Búsqueda exitosa
{
newnode = (struct SPQ*) malloc (sizeof(spq));
if (newnode==NULL)
{
printf("\n¡No hay suficiente memoria!\n");
exit(0);
}
newnode -gt; upnode = ntx; //Guarda la dirección del nodo principal en una lista vinculada
newnode -gt; nextnode = NULL;
newnode -gt; = 0;
nuevonodo -gt; pr = 0;
nuevonodo -gt; abierto -gt;
nuevonodo -gt; sst = sst;
nuevonodo -gt; spt = spt; ;
p>newnode -gt; spr = 0;
newnode -gt; loop = ntx -gt;
nextnode; = nuevonodo;
p>
oend = nuevonodo;
número abierto
retorno
}
else if ((fpr - fsr ) * fpr gt; = 0) //Para determinar si el número de comerciantes debe ser mayor o igual al número de servidores
{
fsl = fsl sst;
fpl = fpl spt;
for (ssr = 0; ssr lt; = 1; ssr) //regresar
{
int ffsl, ffpl;
if ((ssr lt; = fsl) amp; amp; ((1 - ssr) lt; = fpl))
{
spr = 1 - ssr;
ffsl = fsl - ssr;
ffpl = fpl - spr
si (( ffpl - ffsl) * ffpl gt; = 0)
{ //Si se cumplen las condiciones, asigna memoria y paga el valor
int ffsr, ffpr;
ffsr = fsr ssr;
ffpr = fpr spr;
newnode = (struct SPQ*) malloc (sizeof(spq));
if( newnode== NULL)
{
printf("\n¡No hay suficiente memoria!\n");
exit(0);
}
newnode -gt; upnode = ntx; //Guarda la dirección del nodo principal en una lista vinculada
newnode -gt;
nuevonodo - gt; pr = ffpr;
nuevonodo -gt; sl = ffsl;
nuevonodo -gt; gt; sst = sst ;
nuevonodo -gt; spt = spt;
nuevonodo -gt; ssr = ssr;
nuevonodo -gt; ;
nuevonodo -gt; bucle = ntx -gt; bucle 1;
uend -gt; siguientenodo = nuevonodo; >
número sin abrir
}
}
}
}
}
}
return 0;
}
void addtoopened(struct SPQ *ntx)
{
sin abrir = sin abrir -gt; nextnode;
unopenednum--;
if (openednum == 0 )
oend = abierto = ntx; p>
oend -gt; nextnode = ntx;
oend = ntx;
opennum
}
grabador vacío ()
{
int i , bucle
estructura SPQ *ne;
wnode;
estructura SPQ *ntx;
loop = oend -gt; loop;
ntx = oend;
resultnum = 0 ;
for( i = 0 ; i lt; = bucle ; i )
{
nuevonodo = (struct SPQ*) malloc (sizeof(spq) );
if(newnode==NULL)
{
printf("\n¡No hay suficiente memoria!\n");
salir(0);
}
nuevonodo -gt; sr = ntx -gt;
nuevonodo -gt; pr;
nuevonodo -gt; sl = ntx -gt;
nuevonodo -gt; ; sst = ntx -gt; sst;
nuevonodo -gt; spt = ntx -gt;
nuevonodo -gt; >
nuevonodo -gt; spr = ntx -gt;
nuevonodo -gt; siguientenodo
ntx = ntx -gt;
if(i == 0)
resultado = nuevonodo;
nuevonodo -gt; siguientenodo = resultado;
resultado = nuevonodo;
resultnum;
}
}
void releasemem()
{
int i ;
estructura SPQ* nodefree;
for ( i = 1 ; i lt; opennum ; i )
{
nodefree = abierto;
abierto = abierto -gt; nextnode;
libre(nodolibre
}
para ( i = 0 ; i lt; sin abrirnum; i)
{
nodolibre = sin abrir;
sin abrir = sin abrir -gt
gratis( nodefree);
}
}
void showresult()
{
int i; p>
p>
int fsr, fpr; //El número de personas en la margen derecha
int fsl, fpl //El número de personas en la margen izquierda
estructura SPQ* nodofree;
p>
printf("d
empresario", resultado -gt; pr);
printf ("d sirvientes", resultado -gt; sr);
printf ("d empresarios", resultado -gt ; pl
printf ("d sirvientes", resultado -gt; sl
for ( i = 1 ; i lt; resultnum ; i )
{
nodolibre = resultado;
resultado = resultado -gt; nextnode;
libre(nodolibre);
printf ("\ n\n\tEl número de personas en la margen izquierda y el número de personas en la margen derecha en la dirección\n");
printf("Round d\n", i); p>
fpl = resultado -gt; pl - resultado -gt; spt resultado -gt;
fpr = resultado -gt; resultado -gt; p> fsl = resultado -gt ; sl - resultado -gt; sst resultado -gt;
fsr = resultado -gt; resultado -gt;
printf ("Empresario 8d8d\tlt; -\t8d\n", fpl, resultado -gt; spt, fpr
printf("sirviente 8d8d\tlt; -\t8d\n", fsl, resultado); -gt; sst, fsr) ;
printf("Empresario 8d8d\t-gt;\t8d\n", resultado -gt; pl, resultado -gt; spr, resultado -gt; pr - resultado -gt; spr);
printf("Servidor 8d8d\t-gt;\t8d\n", resultado -gt; sl, resultado -gt; ssr, resultado -gt; sr - resultado -gt ; ssr);
}
printf("\nTodos los comerciantes y sirvientes han llegado al otro lado"); p>
}
void goon()
{
elección de caracteres;
for(;;)
{
printf("¿Continuar? (S/N)\n");
scanf ("s", amp; elección);
elección=toupper(elección);
if (choice=='Y')romper;
if (choice=='N')salir(0);
}
}