鸽子笼原理,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);
}