import java.util.Arrays;
import java.util.Scanner;
/**
* Created by 90684 on 2018/6/14.
*/
// 题目:给n个数字,在给一个m,写出这n个数字的全排列,其中临近的两个数字和不能超过m。
// 题解:采用递归的方法,数据交换
public class test1 {
public static void permute(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); //还原成原来的数组,便于下一次的全排列
}
}
private static void swap(int[] array, int s, int i) {
int t = array[s];
array[s] = array[i];
array[i] = t;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] num = new int[n];
for (int i = 0; i < n; i++) {
num[i] = sc.nextInt();
}
int k = sc.nextInt();
permute(num, 0, k);
}
}
全排列问题 java代码实现
最新推荐文章于 2023-05-19 01:46:57 发布