poj1681 高斯消元+dfs枚举

2014-11-24 11:55:59 · 作者: · 浏览: 0

wa N多次后,终于把高斯消元的模板给弄出来了,并且精简了许多。

用dfs枚举变元比二进制枚举变元简单多了。

(也终于明白 变元代表只得解的个数。)

上模板。

#include 
  
   
#include 
   
     using namespace std; int a[400][400]; int ans[400],x[400];//ans[]用于记录哪几种情况。x[]保存结果。 int equ,var,cnt,var0; void dfs(int v) { if(v==var) //将多个解的情况枚举出来就可以当成是“唯一解”处理了。 { int temp=0; memcpy(x,ans,sizeof(ans)); //唯一多的一条语句。 for(int i=var0-1;i>=0;i--) //开始位置不一样。未被遍历的,已经从ans[]拷贝过来了。 { x[i]=a[i][var]; for(int j=i+1;j
    
     abs(a[k][col])) k=i; if(a[k][col]) { for(int r=col;r<=var;r++) swap(a[h][r],a[k][r]); for(int i=h+1;i
     
      =0;i--) { x[i]=a[i][var]; for(int j=i+1;j
      
       =n) a[i-n][i]=1; if(i+n
       
        >cas; while(cas--) { int n; char ch; cin>>n; init(n); for(int i=0;i
        
         >ch; a[i][n*n]=ch=='w'; } gauss(); } return 0; }