/* * C++ Program to Find Hamiltonian Cycle */ #include #include #include #define V 5 using namespace std; void printSolution(int path[]); /* * check if the vertex v can be added at index 'pos' in the Hamiltonian Cycle */ bool isSafe(int v, bool graph[V][V], int path[], int pos) { if (graph [path[pos-1]][v] == 0) return false; for (int i = 0; i < pos; i++) if (path[i] == v) return false; return true; } /* solve hamiltonian cycle problem */ bool hamCycleUtil(bool graph[V][V], int path[], int pos) { if (pos == V) { if (graph[ path[pos-1] ][ path[0] ] == 1) return true; else return false; } for (int v = 1; v < V; v++) { if (isSafe(v, graph, path, pos)) { path[pos] = v; if (hamCycleUtil (graph, path, pos+1) == true) return true; path[pos] = -1; } } return false; } /* solves the Hamiltonian Cycle problem using Backtracking.*/ bool hamCycle(bool graph[V][V]) { int *path = new int[V]; for (int i = 0; i < V; i++) path[i] = -1; path[0] = 0; if (hamCycleUtil(graph, path, 1) == false) { cout<<"\nSolution does not exist"<