void output_result( int id, const int * arr, int m, int n )
{
int i, j, idx;
idx = 0;
printf( "> No %d :\n", id );
for( i = n; i--; ) {
for( j = m; j; ) {
printf( ( j-- < m ? ", %d" : " %d" ), arr[idx++] );
}
printf( "\n" );
}
}
void output_result( int id, const int * arr, int m, int n )
{
int i, j, idx;
idx = 0;
printf( "> No %d :\n", id );
for( i = n; i--; ) {
for( j = m; j; ) {
printf( ( j-- < m ? ", %d" : " %d" ), arr[idx++] );
}
printf( "\n" );
}
}
void ListArray(bool source[][COL], int row, int col)
{
int i,j;
if (row>=ROW)
{
row=ROW-1;
for (i=0; i<COL; i++)
{
int temp=0;
for (j=0; j<ROW; j++)
{
if (source[j][i])
temp++;
}
if (temp!=c[i])
return;
}
for (i=0; i<ROW; i++)
{
for (int j=0; j<COL; j++)
{
if (source[i][j])
cout<<1<<" ";
else
cout<<0<<" ";
}
cout<<endl;
}
cout<<endl;
return;
}
int count=0;
for (i=0; i<col; i++)
{
if (source[row][i])
count++;
}
count=r[row]-count;
if (count<=0)
{
bool dest[ROW][COL];
CopyArray(source,dest);
ListArray(dest,row+1,0);
return;
}
for (i=col; i<=(COL-count); i++)
{
bool dest[ROW][COL];
CopyArray(source,dest);
dest[row][i]=true;
if (i==(COL-1))
{
ListArray(dest,row+1,i);
}
else
{
ListArray(dest,row,i+1);
}
}
}
bool f ( int *a, int *b, int *box, int c, int d )
{
int i, pone, ptwo, *newa, *newb;
bool flag;
pone = ptwo = 0;
for ( i = 0; i < c; ++i )
{
pone += a[i];
}
for ( i = 0; i < d; ++i )
{
ptwo += b[i];
}
if ( pone != ptwo ) return false;
pone = ptwo = 0;
newa = new int [c];
newb = new int [d];
g ( a, newb, c ); //函数g()把数组a的值按升序排入newa中,a数组元
g ( b, newb, d ); //素个数为c,代码大家都会,我就不写了
while ( newa[pone] && newa[ptwo] )
{
if ( newa[pone] == 0 ) ++pone;
if ( newb[ptwo] == 0 ) ++ptwo;
}
while ( pone != c && ptwo != d )
{
flag = newa[pone] > newb[ptwo];
if ( flag )
{
for ( i = 0; i < newb[ptwo]; ++i )
{
box [pone+i][ptwo] = 1;
--newa[pone+i];
}
++ptwo;
}
else
{
for ( i = 0; i < newa[pone]; ++i )
{
box [pone][ptwo+i] = 1;
--newb[pone+i];
}
++pone;
}
}
void output_result( int id, const int * arr, int m, int n )
{
int i, j, idx;
idx = 0;
printf( "> No %d :\n", id );
for( i = n; i--; ) {
for( j = m; j; ) {
printf( ( j-- < m ? ", %d" : " %d" ), arr[idx++] );
}
printf( "\n" );
}
}
void output_result( int id, const int * arr, int m, int n )
{
int i, j, idx;
idx = 0;
printf( "> No %d :\n", id );
for( i = n; i--; ) {
for( j = m; j; ) {
printf( ( j-- < m ? ", %d" : " %d" ), arr[idx++] );
}
printf( "\n" );
}
}