返回题解分享
讨论 / 题解分享/ 帖子详情

部分元素排列 - 题解

import java.util.*;

public class Main {
	public static boolean flag[];// 标记第i个元素是否被使用过
	public static int n;
	public static int road[];

	//用来检查是否是正序的
	public static boolean check(int road[], int total) {
		boolean natural = true;
		for (int i = 1; i < total; i++) {
			if (road[i] > road[i + 1])
				natural = false;
		}
		return natural;
	}

	// idx 选择第几个数了
	// 选取元素总数
	public static void dfs(int idx, int num[], int total) {
		if (idx > total) {
			if (check(road,total)) {
				for (int i = 1; i <= total; i++) {
					System.out.print(road[i] + " ");
				}
				System.out.println();
			}
			return;
		}
		for (int i = idx ; i <= n; i++) {
			if (!flag[i]) {
				road[idx] = num[i];
				flag[i] = true;
				dfs(idx + 1, num, total);
				flag[i] = false;
			}
		}
		return;
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		int r = sc.nextInt();

		flag = new boolean[n + 5];
		int num[] = new int[n + 5];
		road = new int[n + 5];
		for (int i = 1; i <= n; i++) {
			num[i] = sc.nextInt();
		}
//		fromIndex 是排序开始的位置(包含),toIndex 是排序结束的位置(不包含)。
//		这意味着 Arrays.sort(a, fromIndex, toIndex) 将对数组 a 从索引 fromIndex 到 toIndex - 1 的范围进行排序。
		Arrays.sort(num, 1, n+1);
		sc.close();
		dfs(1, num, r);
	}
}
0 回复 0 转发 0 喜欢 5 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!