鸽子笼原理,C语言编程。使用C而不是C++

# include & ltstdio.h & gt

#定义M 5

int a[M],b[M],len=-1,sign = 0;

void dfs(int n,int mark)

{

int i,flag

如果(n==0)

{

flag = 1;

for(I = 1;我& ltleni++)

if((b[I-1]& lt;b[i])!=(b[I]& lt;b[i+1])

{

flag = 0;

打破;

}

if(flag==1)

{

sign = 1;

for(I = 0;我& lt= leni++)

printf("%d ",b[I]);

printf(" \ n ");

}

}

其他

if(M-mark & gt;n)

{

len++;

b[len]= a[mark];

dfs(n-1,mark+1);

b[len]= 0;

len-;

dfs(n,马克+1);

}

其他

{

len++;

b[len]= a[mark];

dfs(n-1,mark+1);

b[len]= 0;

len-;

}

}

void main()

{

int I;

for(I = 0;我& ltm;i++)

scanf("%d ",& ampa[I]);

for(I = M;符号= = 0;我-)

dfs(i,0);

}