123全排列C++代码
时间: 2023-11-14 18:31:21 浏览: 69
#include <iostream>
using namespace std;
void permute(int *a, int l, int r)
{
if (l == r)
{
for (int i = 0; i <= r; i++)
cout << a[i] << " ";
cout << endl;
}
else
{
for (int i = l; i <= r; i++)
{
swap(a[l], a[i]);
permute(a, l + 1, r);
swap(a[l], a[i]);
}
}
}
int main()
{
int n;
cout << "Enter the number of elements: ";
cin >> n;
int a[n];
cout << "Enter the elements: ";
for (int i = 0; i < n; i++)
cin >> a[i];
permute(a, 0, n - 1);
return 0;
}
相关问题
字母全排列c++代码
以下是一个使用递归方法实现全排列的C++代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
// 交换字符串中两个字符的位置
void swap(string& str, int i, int j) {
char temp = str[i];
str[i = str[j];
str[j = temp;
}
// 对字符串的[start, end区间进行全排列
void permute(string str, int start, int end) {
if (start == end) {
cout << str << endl; // 打印排列结果
} else {
for (int i = start; i <= end; i++) {
swap(str, start, i); // 交换第一个字符与后面的字符
permute(str, start + 1, end); // 递归全排列后面的字符
swap(str, start, i); // 恢复字符串原来的顺序,方便下一次交换
}
}
}
int main() {
string str = "c";
permute(str, 0, str.length() - 1);
return 0;
}
```
运行以上代码,输出结果为:
```
c
```
这是由于字符串 "c" 只有一个字符,所以它的全排列就是它本身。
全排列c++代码回溯法
你好!以下是使用回溯法实现全排列的 C 代码示例:
```c
#include <stdio.h>
// 交换两个元素的值
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 递归生成全排列
void permute(int arr[], int start, int end) {
if (start == end) {
for (int i = 0; i <= end; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
for (int i = start; i <= end; i++) {
swap(&arr[start], &arr[i]); // 交换元素
permute(arr, start + 1, end); // 递归生成剩余元素的全排列
swap(&arr[start], &arr[i]); // 恢复原始顺序,进行下一次交换
}
}
}
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
printf("全排列:\n");
permute(arr, 0, n - 1);
return 0;
}
```
这段代码使用了递归和回溯的思想来生成给定数组的全排列。你可以将要排列的数字存储在 `arr` 数组中,并设置起始位置 `start` 和结束位置 `end`。然后,调用 `permute` 函数即可打印出全排列结果。
希望对你有帮助!如果有任何问题,请随时提问。