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 }

目录
相关文章
|
12天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
30 3
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
114 63
|
5天前
|
存储 并行计算 安全
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
|
7天前
|
存储 算法 搜索推荐
这些算法在实际应用中有哪些具体案例呢
【10月更文挑战第19天】这些算法在实际应用中有哪些具体案例呢
16 1
|
13天前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
47 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
20天前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
14 1
|
7天前
|
监控 算法 数据挖掘
HyperLogLog算法有哪些应用场景呢
【10月更文挑战第19天】HyperLogLog算法有哪些应用场景呢
8 0
|
13天前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
19 0
|
17天前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
14 0