全排列問題:
從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列。當m=n時所有的排列情況叫全排列。
如:1,2,3三個元素的全排列為:1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1
具體程序:
1.第一位1,對23進行交換得到全排列:123,132;
2.交換2,1,對13進行全排列:213,231;
3.交換3,1,對21進行全排列:321,312;
/***************全排列問題*****************/
#include<stdio.h>
#define N 10000
//實作兩個整形引數值交換
void Swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
//實作全排列功能
int Fullpermutation(int arr[], int begin, int end)
{//be開始位置,en結束位置
int i;
if(begin >= end)// 找到一個排列
{
for (i = 0; i < end; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
else// 沒有找完一個排列,則繼續往下找下一個元素
{
for (i = begin; i < end; i++)
{
if (begin != i)
{
Swap(&arr[begin], &arr[i]); // 交換
}
// 遞回排列剩余的從be+1到en的元素
Fullpermutation(arr, begin + 1, end);
if (begin != i)
{
Swap(&arr[begin], &arr[i]); // 回溯時還原
}
}
}
}
int main()
{
int n,i;
int array[N];
scanf("%d",&n);
//初始化陣列
for(i=0; i<n; i++)
{
array[i] = i+1;
}
Fullpermutation(array, 0, n);
return 0;
}
運行結果:
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270025.html
標籤:C語言
上一篇:C語言實作數學組合問題
下一篇:基于C++的小型公司工資管理系統
