C++ 递归位置排列算法及其应用

简介:

废话不多说,我们先看一下位置排序的算法:

#include <iostream>
using namespace std;

	int n = 0;
	int m = 2;
	int l = 0;
	int a[100];

	void solve(int l);

int main()
{

	cout<<"请输入位数 n "<<endl;
	cin>>n;

	solve(l);
	return 0;
}


void solve(int l)
{
	if(l>=n)
	{
		for(int i = 0 ; i<n; i++)
		{
			cout<<a[i];
		}
		cout << endl;
		return;
	}
	for(int i = 0 ;i < m;i++)
	{
		a[l] = i;
		solve(l+1);

	}
}

运行结果如下:

请输入位数 n 
4
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111


我们可以把这个算法应用到这样一个例子中:

递归求一个集合的所有子集:

代码如下:

#include <iostream>
#include<vector>
#include <stdio.h>

using namespace std;

void solve(int l);

int n, m;
int mat[100];
vector<string>   collection;

int main()
{
    string   firstElement;
    string   element;



    int     mcount          = 1;

    cout << "Please input the element , end by #end" << endl;
    cin  >>  firstElement;

    while(firstElement != "#end")
    {
        element = firstElement;

         cout << "The element "<<mcount<< " you input is  "+ element<< endl;

         collection.push_back(element);

	 //cout << collection[mcount-1];

         cout << "Please input the next element , end by #end" << endl;
         cin >>  firstElement;
    }
	n = collection.size();
    	m = 2;
    	solve(0);
    return 0;
}

void solve(int l)//l=0
{
    int i;
    if(l >= n)//n=4
    {
	printf("{");
        for(i=0; i<n; ++i)
        {
            if(mat[i] == 1)
            {
                cout<< collection[i] << " ";
            }
        }
        printf("}\n");
        return;
    }
    for(i=0; i<m; ++i)//m=2
    {
        mat[l] = i;
        solve(l+1);
    }
}

运行结果如下:


Please input the element , end by #end
a
The element 1 you input is  a
Please input the next element , end by #end
b
The element 1 you input is  b
Please input the next element , end by #end
c
The element 1 you input is  c
Please input the next element , end by #end
#end
{}
{c }
{b }
{b c }
{a }
{a c }
{a b }
{a b c }

目录
相关文章
|
1月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
41 3
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
140 63
|
11天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
28 2
|
14天前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
24 0
|
23天前
|
存储 并行计算 安全
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
|
25天前
|
存储 算法 搜索推荐
这些算法在实际应用中有哪些具体案例呢
【10月更文挑战第19天】这些算法在实际应用中有哪些具体案例呢
27 1
|
1月前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
72 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
1月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
451 0
高精度算法(加、减、乘、除,使用c++实现)
|
25天前
|
监控 算法 数据挖掘
HyperLogLog算法有哪些应用场景呢
【10月更文挑战第19天】HyperLogLog算法有哪些应用场景呢
15 0
|
1月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
25 0