/** * Created by 90684 on 2018/6/14. */ // 题目:给n个数字,在给一个m,写出这n个数字的全排列,其中临近的两个数字和不能超过m。
// 题解:采用递归的方法,数据交换 publicclasstest1{ publicstaticvoidpermute(int[] array, int start, int k){ boolean flag = true; if (start == array.length) { // 输出 for (int i = 0; i < array.length - 1; i++) { if ((array[i] + array[i + 1]) > k) { flag = false; break; } } if (flag == true) { System.out.println(Arrays.toString(array)); }
} else for (int i = start; i < array.length; ++i) { swap(array, start, i); // 交换元素 permute(array, start + 1, k); //交换后,再进行全排列算法 swap(array, start, i); //还原成原来的数组,便于下一次的全排列 } }
privatestaticvoidswap(int[] array, int s, int i){ int t = array[s]; array[s] = array[i]; array[i] = t; }
publicstaticvoidmain(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] num = newint[n]; for (int i = 0; i < n; i++) { num[i] = sc.nextInt(); } int k = sc.nextInt(); permute(num, 0, k); } }