• 枚举排列


    今天我们来学习一些轻松的东西,全排列,这个东西应该还是非常的基础的,所以这里我们就不用再对他多做太多解释了,这里直接上一道题和一个标程,大家练习一下其实就可以了。

    题目传送门:P1706 全排列问题

    标程如下:

    #include<bits/stdc++.h>
    using namespace std;
    bool x[12];
    int xx[13];
    int n;
    void p_search(int a)
    {
    	if(a==n+1)
    	{
    		for(int i=1;i<=n;++i)
    		{
    			printf("%5d",xx[i]);
    		}
    		printf("
    ");
    		return;
    	}
    	for(int i=1;i<=n;++i)
    	{
    		if(!x[i])
    		{
    			xx[a]=i;
    			x[i]=true;
    			p_search(a+1);
    			x[i]=false;
    		}
    	}
    }
    int main()
    {
    	cin>>n;
    	p_search(1);
    }
    

    如果我们把这道题改一下,我们从n个数中选取m个数,然后并且保证他们都不一样,那么我们只需要把递归边界改一下,然后在改一下下面循环部分的内容就可以了

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    bool x[12];
    int xx[13];
    int n,m;
    void p_search(int a,int b,int m)
    {
    	if(a==m+1)
    	{
    		for(int i=1;i<a;++i)
    		{
    			printf("%5d",xx[i]);
    		}
    		printf("
    ");
    		return;
    	}
    	for(int i=b;i<=n;++i)
    	{
    		if(!x[i])
    		{
    			xx[a]=i;
    			x[i]=true;
    			p_search(a+1,i+1,m);
    			x[i]=false;
    		}
    	}
    }
    int main()
    {
    	cin>>n>>m;
    	p_search(1,1,m);
    }
    

    谢谢采纳!

  • 相关阅读:
    代理工具介绍
    Cookie 相关
    在JavaScript 使用命名空间
    oracle rank()用法
    sql update 特殊用法
    Repeat 嵌套绑定
    .net 中隐式事务和显示事务的用法
    为站点添加迅雷下载和快车下载
    缺少MSVCR71.DLL解决方式
    关于AppFabric Caching的学习摘录
  • 原文地址:https://www.cnblogs.com/mudrobot/p/13330817.html
Copyright © 2020-2023  润新知