【高斯消元】poj 1222
2015-10-11 20:12
288 查看
http://poj.org/problem?id=1222
高斯消元求唯一解集x[ ],关键是初始化构造系数矩阵,有了增广矩阵套模板即可
高斯消元求唯一解集x[ ],关键是初始化构造系数矩阵,有了增广矩阵套模板即可
/* poj 1222 高斯消元 题意: 类似于翻转棋,按一下上下中左右翻转,给定初始状态,问回到全0的状态的按键方案 思路: 对于每个位置,倒着想,初始为0,上下中左右加起来为初始状态,每一个位置皆如此。 30个位置,30个变量,30个方程,求解线性方程组AX=B即可。 其中,B为初始状态构成的列向量,系数矩阵A由上下中左右的位置关系决定,需要自己构造 求解方法——高斯消元,最终输出解X即可。 */ #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<vector> #include<set> #include<map> #include<algorithm> #include<sstream> #define eps 1e-9 #define pi acos(-1) #define INF 0x7fffffff #define inf -INF #define long long ll #define M 10 #define N 1010 using namespace std; const int _max = 30 + 10; //有equ个方程,var个变元。增广矩阵行数为equ,分别为0到equ-1,列数为var+1,分别为0到var. int equ,var; int a[_max][_max];//增广矩阵 int x[_max];//解集 int Gauss(){//高斯消元求解线性方程组AX=B int i,j,k; int max_r; int col; int temp; col=0; for(k=0;k<equ&&col<var;k++,col++){ max_r=k; for(i=k+1;i<equ;i++){ if(abs(a[i][col])>abs(a[max_r][col]))max_r=i; } if(max_r!=k){ for(j=col;j<var+1;j++)swap(a[k][j],a[max_r][j]); } if(a[k][col]==0){k--;continue;} for(i=k+1;i<equ;i++){ if(a[i][col]!=0){ for(j=col;j<var+1;j++) a[i][j]^=a[k][j]; } } } for(i=var-1;i>=0;i--){ x[i]=a[i][var]; for(j=i+1;j<var;j++) x[i]^=(a[i][j]&&x[j]); } return 0; } void init(){//构造增广矩阵a[29][30] memset(a,0,sizeof(a)); equ = var = 30;//30个方程,30个变量 for(int i = 0; i < 30; ++ i){//0-29行中的第i行 a[i][i] = 1; if(i<24) a[i][i+6] = 1; if((i+1)%6) a[i][i+1] = 1; if(i%6) a[i][i-1] = 1; if(i > 5) a[i][i-6] = 1; } } int main() { #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); #endif // ONLINE_JUDGE int T;cin>>T;int kase = 1; while(T--){ init(); for(int i = 0;i < 30; ++ i) scanf("%d",&a[i][30]);//列向量B,作增广矩阵最后一列 Gauss(); printf("PUZZLE #%d\n",kase++); for(int i = 0;i < 30;++ i) if((i+1)%6==0) printf("%d\n",x[i]); else printf("%d ",x[i]); } return 0; }
相关文章推荐
- Matlab 高斯消元
- 高斯消元
- [BZOJ1013][JSOI2008][高斯消元]球形空间产生器sphere
- poj 1222 高斯消元
- hdu 4418 高斯消元+概率dp
- BZOJ4031——HEOI小z的房间
- poj 1681 Painter's Problem 高斯消元
- poj 1830 开关问题 高斯消元
- 高斯消元
- HDU 4870 Rating 多校联合练习赛 高斯消元
- POJ 1830 开关问题 (高斯消元)
- POJ 1753 Flip Game (高斯消元)
- POJ 3185 The Water Bowls(高斯消元)
- POJ 1681 Painter's Problem (高斯消元)
- SGU 275 To xor or not to xor (高斯消元)
- SGU 200 Cracking RSA (高斯消元+大数高精度)
- HDU 3976 Electric resistance (高斯消元)
- poj 1487 Single-Player Games 高斯消元
- poj 1222 EXTENDED LIGHTS OUT 高斯消元
- poj 1753 Flip Game 高斯消元