文章
18
粉丝
0
获赞
89
访问
4.2k
#include<stdio.h>
#include<stdlib.h>
int n,a[11],book[11]= {0};
void dfs(int step) {
if(step==n) {
for(int i=0; i<n; i++) {
printf("%d ",a[i]);
}
printf("\n");
return;
}
for(int i=1; i<=n; i++) {
if(book[i]==0) {
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
}
int main() {
n=3;
dfs(0);
}
不同的n会产生不同长度的全排列序列,如果把这个序列做成索引,那么无论面对什么数据类型都可以,即便是链表也可以。
#include<stdio.h>
#include<stdlib.h>
int n, a[31], book[31] = {0};
int data[32];
int ans[10001][2];
int ansi=0;
void dfs(int step) {
if (step == 2) {
// 重复判断
for(int i=0; i<ansi; i++) {
if(ans[i][0]==data[a[0]]&&
ans[i][1]==data[a[1]]) {
return;
}
}
ans[ansi][0]=data[a[0]];
ans[ansi++][1]=data[a[1]];
printf("(%d,%d)\n", data[a[0]], data[a[1]]);
return;
}
for (int i = 1; i <= n; i++) {
if (book[i] == 0) {
a[step] = i;
book[i] = 1;
df...
登录后发布评论
暂无评论,来抢沙发