wa只有十分,小数据测试没问题,希望有大佬指正,java
查看原帖
wa只有十分,小数据测试没问题,希望有大佬指正,java
977192
yuuukijian楼主2023/3/26 10:41

思路是找到与给定的num数组相同的的排列后,再搜索m+1次就是答案排列


 	import java.util.*;

    public class Main{
        static int n;
        static int m;
        static int[] arr;
        static int[] flag;
        static int[] num;
        static int count = 0;
        static int v = 0;
    
    public static void main(String[] args){
        Scanner sc =new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        num =new int[n];
        for(int i = 0;i < n;++i ){
            num[i] = sc.nextInt();
        }
        arr = new int[n];
        flag = new int[n+1];
        
        dfs(0);
        
        
    }
    public static void dfs(int x){
        //剪枝 直接return掉不符合num的
        if( v == 0 && x > 0){
            for(int i = 0;i < x; ++i){

                if(arr[i] != num[i]){

                    return;  
                }

            }
            v = 1;//找到后还是老老实实搜索
        }
        
        
        if(x >= n ){
            count++;

            if(count ==  m+1 ){
                for(int i = 0;i < n;++i){
                    System.out.print(arr[i]+" ");
                     
                }
                System.exit(0) ; 
            }

            return;
        }
        

        
        for(int i = 0;i < n;++i){
            if(flag[i] == 0){
                //没被选过
                flag[i] = 1;
                arr[x] = i+1;
                
                
                dfs(x+1);
                
                flag[i] = 0;
                arr[x] = 0;
            }
        }
    }
}
2023/3/26 10:41
加载中...