Given an integer array, find pairs in an array which sum up to a given number.
For example: Array{4,5,1,3,2} and required sum=6 then output should be [1,5] and [2,4].
package com.zhuyu_deng.test;
public class Test
{
private static int a[] = new int[] {1, 2, 3, 4, 5, 6};
private static int len = a.length - 1;
private static int x[] = new int[a.length];
private static boolean flag;
private static int C = 6;
public static void explore()
{
for (int i = 0; i < a.length; ++i)
System.out.print(a[i] + " ");
System.out.println(C);
traceback(0);
}
private static void traceback(int k)
{
if (k > len)
{
if (isRight(len))
{
print();
}
}
else
{
for (int i = 0; i < 2; ++i)
{
x[k] = i;
if (isPartial(k))
traceback(k + 1);
}
}
}
private static boolean isRight(int n)
{
int sum = 0;
for (int i = 0; i <= n; ++i)
{
sum += a[i] * x[i];
}
if (sum == C)
return true;
else
return false;
}
private static boolean isPartial(int n)
{
int sum = 0;
for (int i = 0; i <= n; ++i)
{
sum += a[i] * x[i];
}
if (sum <= C)
return true;
else
return false;
}
private static void print()
{
for (int i = 0; i < a.length; ++i)
{
if (x[i] == 1)
System.out.print(a[i] + " ");
}
System.out.println();
}
public static void main(String args[])
{
// int[] a = {-2,11,-4,13,-5,-2};
int[][] b = { { 0, -2, -7, 0 }, { 9, 2, -6, 2 }, { -4, 1, -4, 1 },
{ -1, 8, 0, -2 } };
int [][] matrix =
{ {2,3,4,1},
{1,1,3,9},
{2,2,3,1},
{2,2,3,1}
};
explore();
}
}
public class subSet
{
public Object a;
public int n;
public int[] x;
public boolean flag;
private int c;
public subSet(int[] a, int c)
{
this.a = a;
this.c = c;
this.n = a.length;
this.flag = false;
this.x = new int[n];
}
public boolean isPartial(int k)
{
int sum = 0;
for (int i = 0; i < k; i++)
sum += ((int[]) (a))[i] * x[i];
return sum <= c;
}
public boolean isComplete(int k)
{
int sum = 0;
if (k >= n)
{
for (int i = 0; i < n; i++)
sum += ((int[]) (a))[i] * x[i];
}
return sum == c;
}
public void printSolution(int k)
{
for (int i = 0; i < n; i++)
if (x[i] == 1)
System.out.print(((int[]) (a))[i] + " ");
System.out.println();
}
public static void backtrack(subSet p)
{
explore(p, 0);
if (!p.flag)
System.out.println("no sulution!");
}
private static void explore(subSet p, int k)
{
if (k >= p.n)
{
if (p.isComplete(k))
{package com.zhuyu_deng.test;
public class Test
{
// public Object a;
private int a[];
private int size; // 记录个数
private int[] x;
private boolean flag;
private int val;
public Test(int[] a, int c)
{
this.a = a;
this.val = c;
this.size = a.length;
this.flag = false;
this.x = new int[size];
}
public boolean isPartial(int k)
{
int sum = 0;
for (int i = 0; i < k; i++)
sum += a[i] * x[i];
return sum <= val;
}
public boolean isComplete(int k)
{
int sum = 0;
if (k >= size)
{
for (int i = 0; i < size; i++)
sum += a[i] * x[i];
}
return sum == val;
}
public void printSolution(int k)
{
for (int i = 0; i < size; i++)
if (x[i] == 1)
System.out.print(a[i] + " ");
System.out.println();
}
public static void backtrack(Test p)
{
explore(p, 0);
if (!p.flag)
System.out.println("no sulution!");
}
private static void explore(Test p, int k)
{
if (k >= p.size)
{
if (p.isComplete(k))
{
p.flag = true;
p.printSolution(k);
}
return;
}
for (int i = 0; i < 2; i++)
{
p.x[k] = i;
if (p.isPartial(k))
explore(p, k + 1);
}
}
public static void main(String args[])
{
int b[] = { 1, 2, 3, 4, 5, 6};
Test t = new Test(b, 6);
t.backtrack(t);
}
}