POJ

来源:互联网 发布:电脑内部录音软件 编辑:程序博客网 时间:2024/06/05 07:09

题意

这里写图片描述
这里写图片描述

思路

Guass消元法解方程组

链接

https://vjudge.net/contest/176567#problem/L

代码

#include<cstdio>#include<iostream>#include<cstring>using namespace std;int matrix[37][37], id[37];int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1};void Guess(int n, int m){    int i= 0, j = 0;    while(i < n && j < m)    {        int max_i = i;        for(int k= i+1; k< n; k++)            if(matrix[k][j] == 1)        {            max_i = k;            break;        }        if(matrix[max_i][j])        {            if(max_i != i)                for(int k= 0; k< m; k++)                    swap(matrix[max_i][k], matrix[i][k]);            for(int u= 0; u< n; u++)                if(i != u && matrix[u][j])                    for(int k= j; k< m; k++)                        matrix[u][k] = matrix[u][k] ^ matrix[i][k];            i++;        }        j++;    }}int main(){    int n, cas = 1;    scanf("%d", &n);    while(n --)    {        memset(matrix, 0, sizeof matrix);        memset(id, 0, sizeof id);        for(int i= 0; i< 5; i++)            for(int j= 0; j< 6; j++)        {            scanf("%d", &id[i*6+j]);            matrix[i*6+j][30] = id[i*6+j];        }        for(int i= 0; i< 5; i++)            for(int j= 0; j< 6; j++)        {            matrix[i*6+j][i*6+j] = 1;            for(int k= 0; k< 4; k++)            {                int x = i + dir[k][0];                int y = j + dir[k][1];                if(x >= 0 && x < 5 && y >= 0 && y < 6)                    matrix[i*6+j][x*6+y] = 1;            }        }        Guess(30, 31);        printf("PUZZLE #%d\n", cas++);        for(int i= 0; i< 5; i++)        {            for(int j= 0; j< 6; j++)                printf("%d ", matrix[i*6+j][30]);            printf("\n");        }    }    return 0;}
原创粉丝点击