給定 4 個不同數字,生成所有不重複的 4 位排列,每行輸出一組,組間空行分隔測試用例。
void dfs(int pos) {
if (pos == 4) { output(); return; }
for (int d=0; d<10; d++) if (avail[d]) {
avail[d] = 0; path[pos] = d;
dfs(pos+1);
avail[d] = 1;
}
}
first_case 控制。#include <stdio.h>
#include <string.h>
int avail[10], path[4];
int first_case = 1;
void output() {
if (!first_case) printf("\n");
first_case = 0;
for (int i=0; i<4; i++) printf("%d", path[i]);
printf("\n");
}
void dfs(int pos) {
if (pos == 4) { output(); return; }
for (int d=0; d<10; d++) if (avail[d]) {
avail[d]=0; path[pos]=d;
dfs(pos+1);
avail[d]=1;
}
}
int main() {
int a,b,c,d;
while (scanf("%d%d%d%d",&a,&b,&c,&d)==4) {
if (a==0&&b==0&&c==0&&d==0) break;
memset(avail,0,sizeof(avail));
avail[a]=avail[b]=avail[c]=avail[d]=1;
dfs(0);
}
return 0;
}