针对递归有两种模式。
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 }