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<&& 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)
}
posted @ 2011-09-03 23:11  tungli  阅读(236)  评论(0编辑  收藏  举报