122
void setzeros(int *array,int m,int n)
{
#define array(i,j) (*(array+(i)*n+(j)))
int flag_row=-1;
int flag_rank=-1;
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n && flag_row==-1;j++)
if(array(i,j)==0)
{
flag_row=i;
flag_rank=j;
}
if(flag_row==-1)
return;
for(i=0;i<m;i++)
if(array(i,flag_rank)==0)
array(i,flag_rank)=1;
else
array(i,flag_rank)=0;
for(j=0;j<n;j++)
if(array(flag_row,j)==0)
array(flag_row,j)=1;
else
array(flag_row,j)=0;
array(flag_row,flag_rank)=1;
for(i=0;i<m;i++)
{
if(i==flag_row)
continue;
for(j=0;j<m;j++)
{
if(j==flag_rank)
continue;
if(array(i,j)==0)
{
array(flag_row,j)=1;
array(i,flag_rank)=1;
}
}
}
for(j=0;j<n;j++)
{
if(j==flag_rank)
continue;
if(array(flag_row,j)==1)
for(i=0;i<m;i++)
array(i,j)=0;
}
for(i=0;i<m;i++)
if(array(i,flag_rank)==1)
for(j=0;j<n;j++)
array(i,j)=0;
#undef array(i,j)
}
{
#define array(i,j) (*(array+(i)*n+(j)))
int flag_row=-1;
int flag_rank=-1;
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n && flag_row==-1;j++)
if(array(i,j)==0)
{
flag_row=i;
flag_rank=j;
}
if(flag_row==-1)
return;
for(i=0;i<m;i++)
if(array(i,flag_rank)==0)
array(i,flag_rank)=1;
else
array(i,flag_rank)=0;
for(j=0;j<n;j++)
if(array(flag_row,j)==0)
array(flag_row,j)=1;
else
array(flag_row,j)=0;
array(flag_row,flag_rank)=1;
for(i=0;i<m;i++)
{
if(i==flag_row)
continue;
for(j=0;j<m;j++)
{
if(j==flag_rank)
continue;
if(array(i,j)==0)
{
array(flag_row,j)=1;
array(i,flag_rank)=1;
}
}
}
for(j=0;j<n;j++)
{
if(j==flag_rank)
continue;
if(array(flag_row,j)==1)
for(i=0;i<m;i++)
array(i,j)=0;
}
for(i=0;i<m;i++)
if(array(i,flag_rank)==1)
for(j=0;j<n;j++)
array(i,j)=0;
#undef array(i,j)
}