1 条题解

  • 0
    @ 2024-12-24 10:06:19

    C :

    #include<stdio.h>
    int a[1000],v[1000],n;
    void print(){
    	int i,total=0;
      for (i=1;i<=n;i++) if(total==0) printf("%d",a[i],total++);
      else printf(" %d",a[i]); //将每位输出 
      printf("\n"); //换行 
    }
    
    void DFS(int dep){
    int i;
      if (dep==n) print(); //如果搜到一个结果输出 
      dep++; //查找当前要处理位 
      for (i=1;i<=n;i++) { //枚举当前位 
       if (v[i]) continue; //如果这个数之前被选过就跳过 
       v[i]=1; //选中当前位 
       a[dep]=i;//将当前位存入数组 
       DFS(dep);//搜索下一位 
       v[i]=0;//取消选中当前位 
      }
    }
    
    int main(){
      scanf("%d",&n); //读入
      DFS(0); //深搜
      return 0;
      system("pause"); //暂停(查看结果) 
    }
    
    

    Java :

    import java.util.Scanner;
    
    public class Main {
    	static int n = 0;
    	static int [] book,a;
    	public static void main(String[] args) {
    		Scanner cin = new Scanner(System.in);
    		n = cin.nextInt();
    		book = new int[n+1];
    		a = new int[n+1];
    		for(int i = 0; i <= n; i ++) 
    			book[i] = 0;
    		dfs(1);
    	}
    	public static void dfs(int i) {
    		if(i>n) {
    			for(int k = 1; k <= n; k++) {
    				System.out.print(a[k]);
    				if(k != n) {
    					System.out.print(" ");
    				}else {
    					System.out.println();
    				}
    			}
    		}else {
    			for(int k = 1; k <= n; k ++) {
    				if(book[k]==0) {
    					book[k] = 1;
    					a[i] = k;
    					dfs(i+1);
    					book[k] = 0;
    				}
    			}
    		}
    	}
    }
    
    • 1

    信息

    ID
    2667
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者