该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*分书问题*/
#include
int count=0;
int row=0;
void try(int array[5][5],int row);
void printsolution(int sign[5][5],int count);
int sign[5][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};
main()
{
int array[5][5]={{0,0,1,1,0},{1,1,0,0,1},{0,1,1,0,1},{0,0,0,1,0},{0,1,0,0,1}};
try(array,0);
printf("\n共有%d种分配方案",count);
system("pause");
return 0;
}
void try(int array[5][5],int row)
{int col,i,flag=1;
for(col=0;col<5;col++)
if(array[row][col]==1)
{ if(row>=1)
{for(i=0;i<=row-1&&flag==1;i++)
if(sign[i][col]==1)
flag=0;
}
if(flag==1)
{sign[row][col]=1;
if(row==4)
{count++;
printsolution(sign,count);
}
else
{
row++;
try(array,row);
}
}
}
}
void printsolution(int sign[5][5],int count)
{int i,j;
char people[6]={'A','B','C','D','E','\0'};
printf("第%d个解决方案是:\n",count);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(sign[i][j]==1)
printf("%d号书分配给%c\n",j,people[i]);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
sign[i][j]=0;
}