| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 614 | Accepted: 286 | 
Description
Input
Output
Sample Input
4 1 2 -1 2 3 4 -1 2 -1 4 -1
Sample Output
1 2 3
Source
#include<stdio.h>
#include<string.h>
int a[270][270],ans[270],n;
void swap(int *a,int *b)
  {
  	 int cnt=0,c[270],i;
  	 for(cnt=1;cnt<=n+1;++cnt)
	   {
	     c[cnt]=*a;
	     *a++=*(b+cnt-1);
       }
  	 for(i=1;i<=n+1;++i) *b++=c[i]; 
  }
void XOR(int col,int *a,int *b)
  {
  	 int i;
  	 for(i=col;i<=n+1;++i) *b++^=*a++;
  }
void init()
  {
  	 int col=0,x,i;
  	 for(i=1;i<=n;++i) a[i][n+1]=1;
  	 for(col=1;col<=n;++col) while(~scanf("%d",&x)&&x!=-1) a[x][col]=1;
  }
void solved()
  {
  	 int col,row,node;
  	 for(col=1;col<=n;++col)
  	   {
  	   	  node=0;
  	   	  for(row=col;row<=n;++row)
  	   	    {
  	   	       if(a[row][col]) 
  	   	         {
  	   	         	node=row;
  	   	         	break;
				 }
			}
		  if(node) swap(a[node]+1,a[col]+1);
		  for(row=col+1;row<=n;++row)
		    if(a[row][col]) XOR(col,a[col]+col,a[row]+col);
	   }
  }
void target()
  {
  	 int i,j;
  	 for(i=n;i>=1;--i)
  	   {
  	   	  ans[i]=a[i][n+1];
  	   	  for(j=n-1;j>=1;--j) a[j][n+1]^=(ans[i] & a[j][i]);
	   }
     int first=1;
     for(i=1;i<=n;++i) if(ans[i]) printf("%d ",i);
	 printf("\n");
  }
int main()
  {
  	 int t,x,col=0;
  	 scanf("%d",&n);
  	 init();
  	 solved();
  	 target();
  	 return 0;
  }
[高斯消元] POJ 2345 Central heating
原文:http://www.cnblogs.com/fuermowei-sw/p/6249979.html