高斯消元练习
POJ 1222 EXTENDED LIGHTS OUT
等式解释:如果灯是关着的,那么
必须等于0,维持状态;如果灯是开着的,
必须等于1,改变状态。
5点领域”换个角度看,只有周围的5盏灯会对其产生影响,所以他们的当前系数是1。有:
假设有规模为3*3的9盏灯:
0 1 0
1 0 0
1 1 1
增广矩阵对应的是:
1 1 0 1 0 0 0 0 0 0
1 1 1 0 1 0 0 0 0 1
0 1 1 0 0 1 0 0 0 0
1 0 0 1 1 0 1 0 0 1
0 1 0 1 1 1 0 1 0 0
0 0 1 0 1 1 0 0 1 0
0 0 0 1 0 0 1 1 0 1
0 0 0 0 1 0 1 1 1 1
0 0 0 0 0 1 0 1 1 1
#include #include #include #include using namespace std;const int N=905;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}// a[][]:增广矩阵 n: 方程数 m:变量数void Gauss(int a[N][N],int n,int m,int &r,int &c){ for(r=0,c=0;rabs(a[maxi][c])) maxi=i; } if(maxi!=r){ for(int j=r;j=0;i--){ int t=a[i][c]; for(int j=i+1;j0) a[6*i+j][6*(i-1)+j]=1; if(i<4) a[6*i+j][6*(i+1)+j]=1; if(j>0) a[6*i+j][6*i+j-1]=1; if(j<5) a[6*i+j][6*i+j+1]=1; } } for(int i=0;i<5;i++){ for(int j=0;j<6;j++) scanf("%d",&a[6*i+j][30]); } int r,c; Gauss(a,30,30,r,c); reback(a,30,30,r,c,x); printf("PUZZLE #%d\n",ca++); for(int i=0;i<30;i++){ if((i+1)%6==0) printf("%d\n",x[i]); else printf("%d ",x[i]); } } return 0;}
POJ 1830 开关问题
#include #include using namespace std;const int N=30;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}void Gauss(int a[N][N],int n,int m,int &r,int &c){ for(r=0,c=0;ra[maxi][c]) maxi=i; } if(maxi!=r){ for(int j=r;j=0;i--){ int dex=0; int cnt=0; for(int j=0;j1) continue; int t=a[i][m]; for(int j=0;j=0;i--){ int t=a[i][c]; for(int j=i+1;j>k; while(k--){ memset(a,0,sizeof(a)); int N; scanf("%d",&N); for(int i=0;iPOJ 2947 Widget Factory
有
例如例一:
#include #include #include
暂时没有评论,来抢沙发吧~