Java中,通过dfs实现全排列

dfs需要注意三点:

  1. 截止/边界条件
  2. 遍历候选(遍历可能出现的情况)
  3. 再一次进行dfs之前,需要进行筛选
    static void dfs(int p[],StringBuffer res){
        //截止条件
        if (res.length()==p.length){
            System.out.println(res);
            return;
        }
        //遍历候选
        for (int i=0;i<p.length;i++
             ) {
            //筛选,这里需要注意回溯
            int temp = p[i];
            if (temp==0){
                continue;
            }
            res.append(temp);
            p[i]=0;//使用过的,需要标记一下
            dfs(p,res);
            res.deleteCharAt(res.length() - 1);//将res回溯,使得每次i获得的res是相同的
            p[i]=temp;//p[i]也需要还原
        }
    }

    public static void main(String[] args) {
        int[] p = new int[]{1, 2, 3};
        dfs(p,new StringBuffer());
    }

你可能感兴趣的:(算法)