Red de conocimiento informático - Consumibles informáticos - Puntuación alta: Problema de separación de aceite, ¿cómo programar en C++?

Puntuación alta: Problema de separación de aceite, ¿cómo programar en C++?

#include?

#include?

int?vol1,vol2,vol3,cur1,cur2,cur3 ,bandera=0,objetivo,bordillo1,bordillo2,bordillo3;

int?map[100][100][100];

int?x[10000];?// Registre la operación de vertido de aceite en cada paso. 1 a 2 se representa como 1, 1 a 3 se representa como 2, 2 a 1 se representa como 3, 2 a 3 se representa como 4, 3 a 1 se representa como 5, 3. a 2 se representa como 6?

void?push(int?*t1,?int?*t2,int?v2)?//Considere ?*t1 y *t2 como el volumen de petróleo actual, y v2 como la capacidad del contenedor donde se encuentra *t2.

?

{if(?v2>*t1+*t2){*t2=*t2+*t1;*t1=0;} ¿más?{?*t2=*t2+*t1;*t1=* t2-v2;*t2=v2;}

}

void?print(int?step)

{printf("%d?%d? %d\n",curb1,curb2,curb3); for(int?i=1;?i

{?case?1:? push (&curb1,&curb2,vol2);

printf("%d?%d?%d\n",curb1,curb2,curb3);

caso de ruptura?2: ?

push(&curb1,&curb3,vol3);

printf("%d?%d?%d\n",curb1,curb2,curb3);

romper; caso?3:?

push(&curb2,&curb1,vol1);

printf("%d?%d?%d\n",curb1, curb2,curb3);

romper caso?4:?

push(&curb2,&curb3,vol3);

printf("%d?%d ?%d\n",curb1,curb2,curb3);

romper; caso?5:?

push(&curb3,&curb1,vol1);

printf("%d?%d?%d\n",curb1,curb2,curb3);

romper caso?6:?

push(&curb3,&curb2, vol2);

printf("%d?%d?%d\n",curb1,curb2,curb3);

romper

}

}

void?backtrack(int?step)

{?int?t1=cur1,t2=cur2,t3=cur3;?

if(bandera)?return;

if(?t1==objetivo||t2==objetivo||t3==objetivo)

{?print(paso) ;flag=1;return;?} //¿Empezar a intentar pasar del 1 al 2?

push(&cur1,&cur2,vol2);

if(!map[cur1] [cur2 ][cur3])

{x[step]=1;map[cur1][cur2][cur3]=1; retroceder(paso+1);?

}

cur1=t1;cur2=t2;cur3=t3;

//Finalizar el vertido de 1 a 2 y restaurar el volumen de aceite original de cada recipiente //¿Empezar a intentarlo? verter del 1 al 3? push(&cur1,&cur3,vol3);

if(!map[cur1][cur2][cur3])

{?x[step]= 2;map[cur1] [cur2][cur3]=1; retroceder(paso+1);?

}

cur1=t1;cur2=t2;cur3=t3; //fin 1 3. ¿Restaurar el volumen de aceite original de cada recipiente? //¿Empezar a intentar verter 2 a 1?

push(&

amp;cur2,&cur1,vol1);

if(!map[cur1][cur2][cur3])

{x[step]=3;map[cur1][ cur2][cur3]=1; retroceder(paso+1);?

}

cur1=t1;cur2=t2;cur3=t3; restaurar el volumen de aceite original de cada recipiente // Comience a intentar verter de 2 a 3

push(&cur2,&cur3,vol3);

if(!map[cur1][cur2] [ cur3])

{x[step]=4;map[cur1][cur2][cur3]=1; retroceder(paso+1);?

}

cur1=t1;cur2=t2;cur3=t3; //Finalizar 2 a 3, restaurar el volumen de aceite original de cada contenedor //¿Empezar a probar 3 a 1?

push( &cur3 ,&cur1,vol1);

if(!map[cur1][cur2][cur3])

{x[step]=5;map[cur1][cur2] [ cur3]=1; backtrack(step+1);?

}

cur1=t1;cur2=t2;cur3=t3; //Finalizar 3 a 1, restaurar cada uno; El volumen de aceite original del recipiente // ¿Comenzar a intentar verter de 3 a 2?

push(&cur3,&cur2,vol2);

if(!map[cur1][cur2 ][cur3] )

{x[step]=6;map[cur1][cur2][cur3]=1; retroceder(paso+1);?

}

cur1=t1;cur2=t2;cur3=t3; //Termina 3 y vierte en 2, restaurando el volumen de aceite original de cada recipiente

}

int?main()

{scanf("%d%d%d%d%d%d%d",&vol1,&vol2,&vol3,&cur1,&cur2,&cur3,&memset(mapa); ,0,sizeof(map )); map[cur1][cur2][cur3]=1;

curb1=cur1;curb2=cur2;curb3=cur3; flag) printf("imposible ");

}

Entrada:

3 líneas

La primera línea son 3 números enteros, desde de grande a pequeño, indica capacidad de 3 contenedores

La primera línea es 3 enteros, indica el volumen de aceite original de los 3 contenedores

La tercera línea es 1 entero, indica la cantidad requerida de aceite (Puedes conseguirlo en cualquier contenedor)

Salida:

Cada estado durante el proceso de implementación (es decir, la cantidad de aceite en cada contenedor). No hay una respuesta única.

Si no es posible, genera: "imposible".