• 洛谷 P1706 全排列问题


    洛谷 P1706 全排列问题

    题目链接

    <font face="Comic Sans Ms"size=5>https://www.luogu.org/problemnew/show/P1706


    题目描述

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


    输入输出格式

    输入格式:
    n(1≤n≤9)

    输出格式:
    由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个常宽。


    输入输出样例

    输入样例#1:
    3
    输出样例#1:
    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1


    思路

    不得不承认,这个厂宽坑过我几次......(还是读题不好好读的事情)
    比较经典的一道排列组合题,就是搜索,到了n就输出,然后回溯再搜索就好啦,没有什么很难的地方


    代码

    #include<bits/stdc++.h>//懒人专用头文件
    using namespace std;
    
    bool b[10086];
    int a[10086];
    int n,m;
    
    void print() {//输出
    	for(int i=1; i<=n; i++) {
    		cout<<setw(5)<<a[i];
    	}
    	cout<<endl;
    }
    
    int search(int t) {//搜索与回溯
    	for(int i=1; i<=n; i++) {
    		if(!b[i]) {
    			a[t]=i;
    			b[i]=1;
    			if(t==n) {
    				print();
    			} else search(t+1);
    			b[i]=0;
    		}
    	}
    }
    
    
    int main() {//输入并从1开始搜
    	scanf("%d",&n);
    	search(1);
    	return 0;
    }
    
  • 相关阅读:
    计算机组成原理学习总纲图
    USE RED
    既有的问题如何解决
    字符串极值题解
    扩展 KMP
    KMP
    FHQ-Treap
    STL
    iOS内存管理理论知识过一遍
    iOS中Block理论知识过一遍
  • 原文地址:https://www.cnblogs.com/loceaner/p/10712905.html
Copyright © 2020-2023  润新知