zoukankan      html  css  js  c++  java
  • 【4004】全排列问题

    Time Limit: 60 second
    Memory Limit: 20 MB

    输出自然数1~n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

    Input

    输入文件仅一行,输入n(1≤n≤9)。

    Output

    由1~n组成的所有不重复的数字序列,每行一个序列(每个元素用一个空格隔开,每行行末用换行结束)。

    Sample Input

    3
    

    Sample Output

    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1
    

    【题解】

    深搜,用bo数组来判重就可以。没有剪枝。

    【代码】

    #include <cstdio>
    
    int n,a[10],num = 0;
    bool bo[10];
    
    void input_data() //输入数据 
    {
        scanf("%d",&n);	
        for (int i = 1;i <= n;i++)  //初始化数组 
            bo[i] = false;
    }
    
    void sear_ch(int t) //dfs
    {
    	a[++num] = t; //记录当前找到的数字 
    	bo[t] = true;
    	for (int i = 1;i <= n;i++) //如果之前没有使用过数字 就尝试用 
    		if (!bo[i]) 
    		    sear_ch(i);	
    	if (num == n) //如果已经完成了全排列 就输出  
    		{
    			for (int i = 1;i <= num-1;i++)	
    			    printf("%d ",a[i]);
    			printf("%d
    ",a[num]);				
    		}
    	num--; //回溯,回到搜索这个数字之前的状态。 
    	bo[t] = false;
    }
    
    void get_ans()
    {
        for (int i = 1;i <= n;i++) //全排列, 则1-n都要排 
    		sear_ch(i);	
    }
    
    int main()
    {
    	input_data();
    	get_ans();
    	return 0;	
    }
    


     

  • 相关阅读:
    GC选择之CMS 并发标记清除
    JVM内存概览与GC初步
    Shell 判断语句
    SUID SGID
    maven package
    ACL权限控制列表
    账户与密码管理
    Ubuntu与Centos在登陆安全方面的比较
    【PL/SQL Developer】动态执行表不可访问,本会话的自动统计被禁止
    【Centos7】Delete virtual bridge
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632496.html
Copyright © 2011-2022 走看看