-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbacktrack2.java
More file actions
73 lines (59 loc) · 1.56 KB
/
backtrack2.java
File metadata and controls
73 lines (59 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.ub.test;
import javax.swing.text.StyledEditorKit.BoldAction;
public class backtrack2 {
private boolean isSolution(int k,int n) {
return k==n;
}
private void printSolution(int a[],int ip[],int k) {
System.out.print("{");
for (int i=0;i<=k;i++) {
System.out.print(" " + a[i] + " ");
}
System.out.print("}" + "\n");
}
private void backtrack(int a[],int ip[],int k) {
int c[] = new int[ip.length + 1];
int noCandidate;
if(isSolution(k,ip.length-1)) {
printSolution(a,ip,k);
}else {
k++; //get the value of vector "a" at each iteration
noCandidate = generateCandidate(c,k,ip,a);
for(int i=0;i<=noCandidate;i++) {
a[k] = c[i]; //not a[i] = a[i] it interpreats differently
backtrack(a,ip, k);
}
}
}
private int generateCandidate(int[] c, int k,int ip[],int[] a) {
int len = ip.length - 1;
// System.out.print("{");
// for (int i=0;i<=len;i++) {
// System.out.print( " " +a[i] + " ");
// }
// System.out.print("}" + "\n");
boolean vector[] = new boolean[10];
//use the vector DS
for (int i=0;i<=len;i++) {
vector[i] = false;
}
for(int i=1;i<k;i++) {
vector[a[i]] = true;
}
for (int i=k,j=0;j<= len ;i++,j++) {
if(a[k] != 0){
c[j] = ip[(k-1)%(len+1)];
}else {
c[j] = ip[i%(len+1)];
}
}
return (len - k) ;
}
public static void main(String args[]) {
int ip[] = {2,4,5};
int a[] = new int [ip.length];
int k = -1;
backtrack2 bt2 = new backtrack2();
bt2.backtrack(a, ip, k);
}
}