全排列问题(深度搜索法)

给定n个不同的数字,获取其不同的排列,此类问题称作全排列,其方法有多种,最常用也最实用的是通过深度搜索获取字典顺序排列

代码如下:

/**
 * 全排列问题(深度搜索字典序)
 * 
 * @author Swing
 * 
 */
public class Main {
	char[] arr = new char[] { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
	// 每种可能的结果输出数组
	char[] result = new char[arr.length];
	// 标记数组,记录数字是否被用过(1为用过)
	int[] tagArray = new int[arr.length];
	int count = 0;

	/**
	 * DFS
	 * 
	 * @param layer
	 *            深度
	 */
	public void fullPermutation(int layer) {
		// 递归到最后一层的下一层,打印
		if (layer > arr.length - 1) {
			count++;
		} else {
			for (int i = 0; i < arr.length; i++) {
				// 如果此数在本次深度下未使用过
				if (tagArray[i] == 0) {
					tagArray[i] = 1;
					result[layer] = arr[i];
					fullPermutation(++layer);
					tagArray[i] = 0;
					layer--;
				}
			}
		}
	}

	public static void main(String[] args) {
		Main main = new Main();
		main.fullPermutation(0);
		System.out.println(main.count);
	}

}

次排序算法的应用例子:https://blog.csdn.net/qq_42013035/article/details/103505922

发布了58 篇原创文章 · 获赞 75 · 访问量 6650

猜你喜欢

转载自blog.csdn.net/qq_42013035/article/details/103777535
今日推荐