hola, mi proyecto trata sobre un parque de atracciones en las cuales se almacenan en un arreglo por nivel de diversion entre mas novel de diversion tengan iran primero , bueno cree mi matriz de bool que pondra todo en falso , despues creo otros dos for que iran hasta h-1 ya que h es la cantidad de aristas o caminos que se conectaran con cada atraccion (que solo puede ser recorrida una sola vez ) entonces dentro de esos for pongo que lea las coordenadas X y Y, y y entonces mi matriz [i][j] =matriz[j][i] = true , pero no se como hacer para validar los caminos, osea supongan que tengo esto:
0 1
2 1
0 2
entonces como son simetricas las coordenadas entonces hay dos circuitos 0120 y 0210 pero no se como hago o que funcion hacer para que halle la transitividad y vea si hay circuito hamiltoniano
por favor podrian ayudarme con eso
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;
}
};
int main (){
int posmayor,mayor;
bool mat[10][10];
int x,y;
string nombre;
atraccion intercambio;
cin>>m>>n>>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++) {
cout<<ar[j].get_name()<<endl;
}
return 0;
}