hola, ya cree mas o menos mi bactracking aqui esta pero tengo ciertas dudas ya que en una parte no se como desarrollarla y eso.
primero asi seria la entrada:
6 2 3
noria 12
mon_rusa 20
carritosCHO 100
silla_voladora 15
gusanito 1
casa_terror 13
0 1
2 1
0 2
y la salida es:
CarritosCho Mon_rusa
POSIBLE
Entrada CarritosCho Mon_rusa Entrada
Entrada Mon_rusa CarritosCho Entrada
entonces bueno me arroga un error y que por lo menos antes de hacer el backtracking, estaba entrando los datos y cuando llegue a las aristas ( h ) ya habia introducido 01 21 02 pero no hacia nada entonces llene y llene hasta que me leyo otras 3 coordenadas X y otras 3 Y mas las que ya habia hecho, me lee el doble,
bueno el asunto es que en el backtracking guarde en sol las j de la matriz de adyacencia ya que me indicaria los caminos pero creo que aparte me guarde el 0 del final que me permite ver si hay circuito o no, pero despues queria llamar a imrpimir para imrpimir los nombre que me mostrarian el circuito hamiltoniano pero ahi me tranque no supo como avanzar
Código C++:
Ver original#include <iostream>
#include <string>
using namespace std;
class atraccion {
private:
int x;
string name;
public:
atraccion () {}
atraccion (int var, string nnombre){
x=var;
name = nnombre;
}
~atraccion() {}
void set_x (int val) { //modifica el x
x = val;
}
int get_x () { //devuelve el x
return x;
}
void set_name ( string nom) { //modifica el nombre
name =nom;
}
string get_name () { //devuelve el nombre
return name;
}
};
void imprimir (int path [], int arcos){
cout<<"Entrada"<<" "; //aqui muestro los caminos para pasar por las atracciones que van de entrada hasta otra vez la entrada
}
void back (int i, int j, bool array[10][10],int camino[],int acum=0 , int arist){
if((j==0) && (acum= arist-1)){
cout<<"POSIBLE"<<endl;
imprimir (camino, arist);
}else{
if (array[i][j] == true ){
for (int x=0;x<10;x++){
int p=j;
camino[x]=j;
array[i][j] = array[j][i]=false;
acum=acum+1;
back (i=p, j=0, array, camino, acum, arist);
camino[x] = ' '; //desmarco y deshago mu solucion
acum= acum-1; //desmarco y deshago mi solucion
}
}else{
back(i,j++,array,camino, acum,arist); //busco otra solucion
}
cout<< "IMPOSIBLE"<<endl;
}
}
int main (){
int posmayor,mayor;
bool mat[10][10];
int x,y;
string nombre;
atraccion intercambio;
int r=0,s=0,t=0;
cin>>m>>n>>h;
int sol[h];
atraccion ar [m]; //arreglo que almacena cada atraccion
for (int i=0;i<m;i++) {
cin>>nombre;
ar[i].set_name(nombre);
}
for( int g=0;g<10;g++){ //matriz de adyacencia
for (int f=0;f<10;f++){
mat[g][f] =false;
}
}
for (int d=0;d<=h-1;d++){ //marca true
for (int e=0;e<=h-1;d++){
cin>>x>>y;
d=x;
e=y;
mat[d][e] =mat[e][d]= true;
}
}
for (int w=0;w<=m-2;w++){ //ordenamiento //modelo 2
posmayor = w;
mayor = ar[w].get_x();
for (int k=w+1; k<=m-1; k++){
/*if ((ar[k].get_x() == mayor) && (ar[k].get_name () < ar[w].get_name())){
mayor= ar[k];
posmayor=k;
}else{*/
if (ar[k].get_x() > mayor) {
mayor = ar[k].get_x();
posmayor =k;
}
//}
}
intercambio = ar[posmayor]; //se encarga de cambiarlos
ar[posmayor] =ar[w];
ar[w] = intercambio;
}
for (int j=0;j<n;j++) { //imprime populares
cout<<ar[j].get_name()<<endl;
}
for (int u=0;u<10;u++) { //imprime booleana
for(int v=0;v<10;v++){
cout<<mat[u][v];
}
}
back(r, s, mat, sol, t , n);
return 0;
}