递归遍历全排列个人见解

针对递归有两种模式。

1.针对原数据进行修改。

2.每次都new出数据放入递归。

1.


 1     private static boolean visited[]=new boolean[num];
 2     private static void DFS(List<String> str,String out,int count) {
 3     //    if(visited[0]==true&&visited[1]==true&&visited[2]==true&&visited[3]==true)
 4         if(count==num)                      //判断条件
 5             System.out.println(out);
 6         for(int i=0;i<str.size();i++)
 7         {
 8             if(false==visited[i])
 9             {
10                 visited[i]=true;                //标记当前已访问
11                 count++;            
12                 DFS(str,out+str.get(i),count);
13                 count--;                     
14                 visited[i]=false;                //恢复状态
15 } 16 } 17 }

2

 1     private static void DFS(List<String> str,String out,int count) {
 2     //    if(visited[0]==true&&visited[1]==true&&visited[2]==true&&visited[3]==true)
 3         if(count==num)
 4             System.out.println(out);
 5         for(int i=0;i<str.size();i++)
 6         {
 7             if(false==visited[i])
 8             {
 9                 LinkedList linkedlist=new LinkedList(str);          //进入DFS之前创建新元素
10                 count++;
11                 DFS(linkedlist,out+linkedlist.remove(i),count);        //每次进去之前把当前的删去
12                 count--;
13             }
14         }
15     }

 

 

 

posted on 2014-03-05 19:20  wf110  阅读(766)  评论(0编辑  收藏  举报