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; }