Tu problema con leer radica en qué tu bucle de leer tienes unas condiciones bastante extrañas y es lógico que no lea bien las aristas. Aquí te lo dejo ya solucionado.
Código C++:
Ver originalfor (int d=0;d<=h-1;d++){ // Cojo de pareja en pareja de vértices conexos hasta que no haya más aristas
cin >> x >> y; // Leo la pareja
mat[x][y]=mat[y][x]=true; // Guardo el dato en la matriz de adyacencia
}
La función de Hamilton la he probado y en todos los ejemplos que he puesto me sale como posible así que ahora si tengo tiempo la miraré con más detenimiento.
Un saludo.