ZKX's LAB

java全排列递归算法 全排列的递归 java

2020-07-21知识6

一个JAVA编程求助:用递归方法求n(n=3)个数的无重复全排列 给你个思路:函数内判断 if(元素个数=2){ 打印结果:元素1,元素2;打印结果:元素2,元素1;} else { 打印结果:元素1,递归本函数(其他元素);打印结果:递归本函数(其他。在java环境中用递归方法求n个数的无重复全排列,n=3。 给你个思路:函数内判断if(元素个数=2){打印结果:元素1,元素2;打印结果:元素2,元素1;} else {打印结果:元素1,递归本函数(其他元素);打印结果:递归本函数(其他元素),元素1;}JAVA中递归排序的问题。 递归排序public class Demo{public void sortArray(int[]array,int m,int n){if(m>;0){if(array[n][n-1]){swap(array,n);}if(n>;=m){sortArray(array,m-1,1);}else{sortArray(array,m,n+1);}}}void swap(int[]array,int k){int temp=array[k];array[k]=array[k-1];array[k-1]=temp;}public void showArray(int[]array){for(int i=0;i;i+){System.out.println(array[i]);}}public static void main(String[]args){Demo demo=new Demo();int[]a=new int[]{3,5,1,2,8,33,22,11,0};demo.sortArray(a,a.length-1,1);demo.showArray(a);}}java全排列递归算法 可迭代的全排列 测试代码在补充发出 这里发不下了*现在这个电脑只有Jdk 直接拿以前写的代码改的 http://wenwen.soso.com/z/q124605836.htm *异常没有处理 目前仅支持 int[]。用java语言把abcd的全排列算法(递归),改成非递归求全排列,递归算法如下: public 最快能想到的就是用四重循环实现。java全排列递归算法 思路:先有一个起始排列,如1234.从后面扫描,直到找到a[k],a[k][k+1];再从后面扫描,直到找到a[j],这里有 a[k][j]。交换a[k],a[j].再把a[k+1],.a[n-1]排序(从小到大),即得到了一个排列,再循环下去,直到找出所有的排序。用C语言的,参考下:http://user.qzone.qq.com/646203846/infocenter?ptlang=2052Java数组的全排列,里面布尔类型的数组vis[ ],在递归算法里起了什么作用,递归那块理解不了,求详细解答 不要急于看代码,你心理要知道全排列的思路,不注重思路是很多程序员易犯的错误。全排列算法:如果我求得固定第一位后的排列,那么全部排列就可以求出,固定第一位有10种可能,可以循环求得。如果我求得固定第二位后的排列,固定第一位后的排列就可以求出,固定第二位有9种可能,可以循环求得。如果我求得固定第10位后的排列,固定第9位后的排列就可以求出,固定第10位有1种可能,可以循环求得。这很明显是递归的算法。static void dfs(int start,int end,int num){/为全部排列的集合,start为数字的位置,end为最后一位,num多余的if(start=end){/当前的数字位置为最后一位时,说明,一个序列已经生成for(int i=1;i;i+)System.out.print(a[i]+\"\");输出序列System.out.println();}else{/序列没有生成时for(int i=1;i;i+){if(vis[i])/i是否在前面使用过continue;如果是直接跳过a[start]=i;确定start位置的数字,当start为1时就是确定第一位,有10种可能vis[i]=true;设置i为已使用状态,避免下一位使用idfs(start+1,end,num);求得确定start位后的全部序列vis[i]=false;设置i为未使用状态}}java中,用递归方法求n个数的无重复全排列,n=3。 程序如下所示,输入格式为:53 1 2 1 2第一行是数字个数,第二行有n个数,表示待排列的数,输入假设待排序的数均为非负数。import java.io.File;import java.io.FileNotFoundException;import java.util.Arrays;import java.util.Scanner;public class Main {static final int maxn=1000;int n;数组元素个数int[]a;数组boolean[]used;递归过程中用到的辅助变量,used[i]表示第i个元素是否已使用int[]cur;保存当前的排列数递归打印无重复全排列,当前打印到第idx位void print_comb(int idx){if(idx=n){/idx=n时,表示可以将cur输出for(int i=0;i;i){if(i>;0)System.out.print(\"\");System.out.print(cur[i]);}System.out.println();}int last=-1;因为要求无重复,所以last表示上一次搜索的值for(int i=0;i;i){if(used[i])continue;if(last=-1|a[i]。last){/不重复且未使用才递归下去last=a[i];cur[idx]=a[i];回溯法used[i]=true;print_comb(idx+1);used[i]=false;}}}public void go()throws FileNotFoundException{Scanner in=new Scanner(new File(\"data.in\"));读取数据并排序n=in.nextInt();a=new int[n];for(int i=0;i;i)a[i]=in.nextInt();。java全排列递归算法一个小问题 是真心没看懂你再说什么什么叫先输入要求输入的字符个数?你这原题 或者 原需求是什么 你写出来我给你CODE

#递归#递归算法#全排列#排列数

随机阅读

qrcode
访问手机版