Skip to content

Commit ca48912

Browse files
Add files via upload
1 parent a7b8a3a commit ca48912

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

Chapter-14/Hamiltonian.java

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import java.util.Scanner;
2+
3+
class Hamiltonian {
4+
static int[][] graph;
5+
static int[] soln;
6+
static int n, count = 0;
7+
8+
public static void main(String[] args) {
9+
Scanner scanner = new Scanner(System.in);
10+
11+
System.out.println("Enter Number of Vertices");
12+
n = scanner.nextInt();
13+
14+
graph = new int[n + 1][n + 1];
15+
System.out.println("Enter Adjacency Matrix");
16+
for (int i = 1; i <= n; i++) {
17+
for (int j = 1; j <= n; j++) {
18+
graph[i][j] = scanner.nextInt();
19+
}
20+
}
21+
22+
soln = new int[n + 1];
23+
24+
System.out.println("Hamiltonian Cycle are");
25+
26+
soln[1] = 1;
27+
hamiltonian(2);
28+
29+
if (count == 0) {
30+
System.out.println("No Hamiltonian Cycle");
31+
}
32+
}
33+
34+
static void hamiltonian(int k) {
35+
while (true) {
36+
nextValue(k);
37+
38+
if (soln[k] == 0) {
39+
return;
40+
}
41+
if (k == n) {
42+
printArray();
43+
} else {
44+
hamiltonian(k + 1);
45+
}
46+
}
47+
}
48+
49+
static void nextValue(int k) {
50+
while (true) {
51+
52+
soln[k] = (soln[k] + 1) % (n + 1);
53+
54+
if (soln[k] == 0) {
55+
return;
56+
}
57+
58+
if (graph[soln[k - 1]][soln[k]] != 0) {
59+
int j;
60+
for (j = 1; j < k; j++) {
61+
if (soln[j] == soln[k]) {
62+
break;
63+
}
64+
}
65+
66+
if (j == k) {
67+
68+
if (k < n || (k == n && graph[soln[n]][soln[1]] != 0)) {
69+
return;
70+
}
71+
}
72+
}
73+
}
74+
}
75+
76+
static void printArray() {
77+
count += 1;
78+
for (int i = 1; i <= n; i++) {
79+
System.out.print(soln[i] + " ");
80+
}
81+
System.out.println(soln[1]);
82+
}
83+
}

0 commit comments

Comments
 (0)