// 输入n个长度m的字符串,输出这n个字符串的全排列(n <= 100, m <= 100)
#include <stdio.h>
// 保存n个字符串
struct A {
char str[100];
}Mem[101];
// IsUsed[10] = true, 表示字符串Mem[10]已经使用
// IsUsed[10] = false,表示字符串Mem[10]未使用
bool IsUsed[101];
// Order[1] = 10, 表示Mem[10]在第1个位置输出
int Order[101];
// n个字符串
int n;
void Print(int count) {
count++;
if (count == n) {
for(int i = 1; i <= n; ++i) {
if(IsUsed[i] == false) {
IsUsed[i] = true;
Order[count] = i;
for(int i = 1; i <= n; ++i) {
printf("%s", Mem[Order[i]].str);
}
printf("\n");
IsUsed[i] = false;
Order[count] = 0;
}
}
} else {
for (int i = 1; i <= n; ++i) {
if(IsUsed[i] == false) {
IsUsed[i] = true;
Order[count] = i;
Print(count);
IsUsed[i] = false;
Order[count] = 0;
}
}
}
}
void Permutations(){
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%s", Mem[i].str);
}
for(int i = 1; i <= n; ++i) {
//置零,将标志变量全部回到初始状态,进行下一轮输出
for(int i = 1; i <= n; ++i) {
IsUsed[i] = false;
Order[i] = 0;
}
IsUsed[i] = true;
Order[1] = i;
Print(1);
}
}
int main(int argc, char* argv[]) {
Permutations();
return 0;
}
N个字符串全排列
于 2016-05-08 16:23:16 首次发布