全排列问题

来源:互联网 发布:武极天下神迹进阶数据 编辑:程序博客网 时间:2024/06/07 00:54

无重复的全排列:

#include<stdio.h>#define n 3void dfs(int a[],int t){if(t==n){for(int i=0;i<n;i++){printf("%d\t",a[i]);}printf("\n");return ;}for(int i=t;i<n;i++){int temp=a[i];a[i]=a[t];a[t]=temp;dfs(a,t+1);temp=a[i];a[i]=a[t];a[t]=temp;}}int main(){int a[100];for(int i=0;i<n;i++){a[i]=i+1;}dfs(a,0);return 0;  } 

有重复的全排列:

#include <stdio.h>#include <string.h>#include <iostream>using namespace std;int count;bool judge(char arr[],int a,int b){bool flag=true;for(int i=a;i<b;i++){if(arr[i]==arr[b])flag=false;}return flag;}void function(char arr[],int a,int b){if(a==b){count++;for(int i=0;i<b;i++)printf("%c  ",arr[i]);printf("\n");return;}else{for(int i=a;i<b;i++){if(judge(arr,a,i)){swap(arr[a],arr[i]);function(arr,a+1,b);swap(arr[a],arr[i]);}}}}int main(){char arr[100];int m;while(scanf("%d",&m)!=EOF){getchar();count=0;memset(arr,0,sizeof(arr));gets(arr);function(arr,0,m);printf("%d\n",count); }}


0 0