POJ_1222_高斯消元

Posted 冷暖知不知

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ_1222_高斯消元相关的知识,希望对你有一定的参考价值。

题目描述:

  每组数据给出一个5*6的0 1矩阵,每次操作可以把某个位置及其四周的位置0 1置换,要求输出操作位置的矩阵。

思路:

  每个位置操作2次则等于没有操作,所以每个位置有操作和不操作两种选择,爆搜应该会超时。

  在网上看到了高斯消元的做法,按照每个操作位置影响的位置构造系数矩阵,然后读入题目的数据构成增广矩阵。

  接下来的做法便和高斯消元一样,只是把原来的-变成了^。

  30条方程,30个未知量,所以最终的解也是唯一。

 

#include<cstdio>
#include<iostream>
using namespace std;

int a[31][31] = {0};

int main()
{
    int n;
    cin >> n;
    for(int x = 1;x <= n;x++)
    {
        for(int i = 0;i < 30;i++)
        {
            a[i][i] = 1;
            if(i > 5)   a[i][i-6] = 1;
            if(i < 24)  a[i][i+6] = 1;
            if(i%6)     a[i][i-1] = 1;
            if((i+1)%6) a[i][i+1] = 1;
        }
        for(int i = 0;i < 30;i++)   cin >> a[i][30];
        for(int i = 0;i < 30;i++)
        {
            int temp = i;
            for(;temp < 30;temp++)
            {
                if(a[temp][i])
                {
                    for(int j = 0;j <= 30;j++)  swap(a[temp][j],a[i][j]);
                    break;
                }
            }
            for(int j = 0;j < 30;j++)
            {
                if(j != i && a[j][i])
                {
                    for(int k = i;k <= 30;k++)
                    {
                        a[j][k] ^= a[i][k];
                    }
                }
            }
        }
        cout << "PUZZLE #" << x << endl;
        for(int i = 0;i < 30;i++)
        {
            if((i+1)%6) cout << a[i][30] << " ";
            else        cout << a[i][30] << endl;
        }
    }
    return 0;
}

 

以上是关于POJ_1222_高斯消元的主要内容,如果未能解决你的问题,请参考以下文章

*POJ 1222 高斯消元

POJ 1222 extended lights out 高斯消元 板子题

POJ 1222 EXTENDED LIGHTS OUT 高斯消元

POJ 1222 EXTENDED LIGHTS OUT(高斯消元)

POJ 1222 EXTENDED LIGHTS OUT 高斯消元

POJ 1222 EXTENDED LIGHTS OUT(高斯消元)