884. 高斯消元解异或线性方程组

发布时间:2024年01月18日
#include<bits/stdc++.h>

using namespace std;

const int N=110;

int n;
int a[N][N];

int gauss()
{
    int c,r;
    
    for(c=0,r=0;c<n;c++)
    {
        int t=r;
        
        for(int i=r;i<n;i++)
        {
            if(a[i][c])
            {
                t=i;
            }
        }
        
        if(!a[t][c])    continue;
        
        for(int i=c;i<=n;i++)   swap(a[r][i],a[t][i]);
        for(int i=r+1;i<n;i++)
        {
            if(a[i][c])
            {
                for(int j=n;j>=c;j--)
                {
                    a[i][j]^=a[r][j];
                }
            }
        }
        
        r++;
    }
    
    if(r<n)
    {
        for(int i=r;i<n;i++)
        {
            if(a[i][n])
            {
                return 2;
            }
        }
        return 1;
    }
    
    for(int i=n-1;i>=0;i--)
    {
        for(int j=i+1;j<n;j++)
        {
            a[i][n]^=a[i][j]*a[j][n];
        }
    }
    
    return 0;
}

int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n+1;j++)
        {
            cin>>a[i][j];
        }
    }
    
    int t=gauss();
    if(t==2)    puts("No solution");
    else if(t==1)   puts("Multiple sets of solutions");
    else
    {
        for(int i=0;i<n;i++)    cout<<a[i][n]<<endl;
    }
    
    return 0;
}

利用高斯消元来求解问题,昨天想到头疼,感觉睡眠和营养够的话,多想就行了,和锻炼肌肉一样锻炼大脑哈哈,高斯消元有三种情况,经过初等行变换之后,第一种情况是标准的上三角矩阵,有唯一解,第二种情况是非标准上三角矩阵,该种情况又分为两种类型,矛盾与不矛盾,不矛盾就有无穷解,矛盾就无解

在高斯消元函数的最后的部分,需要回代,意思是说,经过前面的判断,可确定是只有唯一解,解方程组得出答案,具体的代码我不是很理解

2表示无解,1表示有无穷解

文章来源:https://blog.csdn.net/L3102250566/article/details/135666933
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。