C ++ encuentra recursivamente la disposición completa de los elementos de la matriz - Experimento 1 de estructura de datos de la Universidad de Shandong

C ++ encuentra recursivamente la disposición completa de los elementos de la matriz-estructura de datos experimento uno

Para el primer blog, si hay alguna mala redacción, envíelo en el área de comentarios.
Publicación de blog de referencia
https://blog.csdn.net/a358463121/article/details/45543879

Debido a que este código está escrito de acuerdo con los requisitos del experimento de estructura de datos de la escuela, hay muchos códigos no esenciales y puede cambiarlos según sus necesidades.

La idea principal de realización: para encontrar la disposición completa de n elementos, primero puede colocar cada elemento en el primer lugar uno por uno, y luego ordenar todos los n-1 elementos restantes, utilizando el método recursivo para lograr, de forma recursiva, solo un En en el caso de los elementos, todos los elementos se emiten. Por ejemplo, para encontrar la disposición completa de los tres elementos a, byc, primero coloque a en el primer lugar y ordene by c. El arreglo b, c usa la misma idea, coloque b en primer lugar, arreglo c, solo hay una forma de generar el arreglo 1: a, b, c. Luego intercambie by c, poniendo c primero. Disposición de salida 2: a, c, b. Después de que se generen todas las permutaciones de a en primer lugar, intercambie a, b, y ponga b en primer lugar, y genere todas las permutaciones. Por analogía, se emiten todas las permutaciones. La siguiente figura piensa personalmente que es más fácil de entender el proceso.Una leyenda en el libro de texto de realización de C ++ de estructura de datos y algoritmo

El siguiente es el código de implementación específico (escrito de acuerdo con los requisitos experimentales)

/*
 2020年10月14日15:54:27
1、实验内容及目的: 
利用递归求所有元素的全排列 
实验要求: 
2、输入2-20个大于0的正整数(1、2、3或者100、200、300),输入0作为结束,0不参与排列。
输出这几个整数的全排列,每个数之间用半角“,”隔开,中间不要有空格,每个排列单独一行。
最后输出的一个数字后面不能有“,”。
3、运行样例: 
输入:3 2 1 0
输出:
Input
3
2
1
0
Output
3,2,1
3,1,2
2,3,1
2,1,3
1,2,3
1,3,2
end0 
*/ 
#include <iostream>
using namespace std;

void swap(int& a, int& b)      //定义交换两个数值的swap函数
{
    
     
    int temp = a;
    a = b;
    b = temp;
}
void perm(int list[], int low, int high)   //实现list数组中从low到high的全排列 
{
    
    
    if (low == high)               //当low==high时,此时list就是其中一个排列,输出list
    {
    
    
        for (int i = 0; i <= low; i++)
            {
    
    
            	
            	cout << list[i];
            	if(i!=low)       //当输出的不是最后一个元素时,输出“,” 
            		cout << ",";
			}
        cout << endl;
        
    }
    else 						//否则递归 
	{
    
    
        for (int i = low; i <= high; i++) //每个元素与第一个元素交换
        {
    
    
            swap(list[i], list[low]);
            perm(list, low + 1, high);   //交换后,得到子序列,用函数perm得到子序列的全排列
            swap(list[i], list[low]);    //最后,将元素交换回来,复原,然后交换另一个元素
        }
    }
}
int main()
{
    
    
    int len = 0;
    int *list;
    list = new int[20];
	cout << "Input" << endl;
	cin >> list[len];
     while (list[len] != 0)     //如果输入“0”则完成元素输入 
    {
    
    
    	len = len + 1;
    	cin >> list[len];
    }
    cout << "Output" << endl;
    perm(list, 0, len-1);
    cout << "end0";
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/m0_47470899/article/details/109077131
Recomendado
Clasificación