• poj1222


    题意:一个01矩阵,表示灯的亮灭状态,每次操作可以改变一个十字形状内的五个灯的状态。问能否将所有灯熄灭。

    分析:高斯消元法

    对于每个灯的两灭有影响的开关就是它附近十字形内的五个开关。所以对于每个灯可以列一个方程,即周围五个开关异或起来的结果应该可以使该灯熄灭。

    就是利用线性代数知识,写出增广矩阵,化为阶梯形矩阵,有下到上依次解出各未知量。

    View Code
    #include <iostream>
    #include
    <cstdlib>
    #include
    <cstring>
    #include
    <cstdio>
    usingnamespace std;

    #define maxn 35

    int f[maxn][maxn];
    int g[maxn][maxn];
    int x[maxn];
    int dir[5][2] =
    {
    {
    0, 0 },
    {
    0, 1 },
    {
    1, 0 },
    {
    -1, 0 },
    {
    0, -1 } };

    void debug()
    {
    for (int i =0; i <30; i++)
    {
    for (int j =0; j <31; j++)
    cout
    <<""<< g[i][j];
    cout
    << endl;
    }
    cout
    << endl;
    }

    void input()
    {
    for (int i =0; i <5; i++)
    for (int j =0; j <6; j++)
    scanf(
    "%d", &g[i *6+ j][30]);
    }

    void work()
    {
    int k;
    int row, col;
    for (row =0, col =0; row <30&& col <30; row++, col++)
    {
    for (k = row; k <30; k++)
    if (g[k][col] !=0)
    break;
    if (k ==30)
    {
    row
    --;
    continue;
    }
    if (k != row)
    for (int i = col; i <=30; i++)
    swap(g[row][i], g[k][i]);
    for (int i = row +1; i <30; i++)
    if (g[i][col])
    for (int j = col; j <=30; j++)
    g[i][j]
    ^= g[row][j];
    }
    for (int i = row; i >=0; i--)
    {
    x[i]
    = g[i][30];
    for (int j =29; j > i; j--)
    x[i]
    ^= (g[i][j] && x[j]);
    }
    }

    void print()
    {
    for (int i =0; i <5; i++)
    {
    printf(
    "%d", x[i *6]);
    for (int j =1; j <6; j++)
    printf(
    " %d", x[i *6+ j]);
    putchar(
    '\n');
    }
    }

    int main()
    {
    //freopen("t.txt", "r", stdin);
    for (int i =0; i <5; i++)
    for (int j =0; j <6; j++)
    for (int k =0; k <5; k++)
    {
    int a = i + dir[k][0];
    int b = j + dir[k][1];
    if (a >=0&& b >=0&& a <5&& b <6)
    f[i
    *6+ j][a *6+ b] =1;
    }
    int t;
    scanf(
    "%d", &t);
    for (int i =0; i < t; i++)
    {
    printf(
    "PUZZLE #%d\n", i +1);
    memcpy(g, f,
    sizeof(g));
    input();
    work();
    print();
    }
    return0;
    }

      

  • 相关阅读:
    我的Javascript之旅——对象的原型链之由来
    如何增强Scrum Teams之间的协作(一)——Feature Team的优势
    如何增强Scrum Teams之间的协作——引子
    关于Automated Acceptance Testing Tool的讨论
    请不要代替你的团队思考
    如何增强Scrum Teams之间的协作(二)——Feature Team的挑战
    爬虫 xpath
    django 一
    Python Requests库详解
    python3爬虫环境搭建
  • 原文地址:https://www.cnblogs.com/rainydays/p/2160748.html
Copyright © 2020-2023  润新知