将下面的代码转换为c语言:#include <iostream> #include <algorithm> #include <stdio.h> using namespace std; int cnt[101], a[9], n, record[9]; void DFS(int cur) { if(cur == n) { for(int i = 0; i < n; i++) printf(" %d" + !i, record[i]); printf("\n"); return; } for(int i = 0; i < n; i ++) { if(!cnt[a[i]]) //如果该元素已被排列完 continue; cnt[a[i]] --; record[cur] = a[i]; if(a[i] != a[i - 1]) DFS(cur + 1);//与上一个元素不同时才全排列,否则直接安排 cnt[a[i]] ++; } } int main() { while(scanf("%d", &n) != EOF) { for(int i = 0; i < n; i++) { scanf("%d", &a[i]); cnt[a[i]] ++; } sort(a, a + n); DFS(0); } return 0; }
时间: 2024-03-29 08:34:17 浏览: 128
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cnt[101], a[9], n, record[9];
void DFS(int cur) {
if(cur == n) {
for(int i = 0; i < n; i++) {
printf(" %d" + !i, record[i]);
}
printf("\n");
return;
}
for(int i = 0; i < n; i ++) {
if(!cnt[a[i]]) //如果该元素已被排列完
continue;
cnt[a[i]] --;
record[cur] = a[i];
if(a[i] != a[i - 1])
DFS(cur + 1);//与上一个元素不同时才全排列,否则直接安排
cnt[a[i]] ++;
}
}
int main() {
while(scanf("%d", &n) != EOF) {
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
cnt[a[i]] ++;
}
for(int i = 1; i <= n; i ++) {
for(int j = i + 1; j <= n; j ++) {
if(a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
DFS(0);
}
return 0;
}
阅读全文