求助高斯消元
查看原帖
求助高斯消元
763542
Furina_Hate_Comma楼主2023/3/22 21:45
#include<bits/stdc++.h>
using namespace std;
struct matrix{
	double a[500][500];
	int n;
	void exchange1(int x,int y){
		double k=a[x][y];
		for(int i=1;i<=n;i++)
			a[x][i]/=k;
	}
	void exchange2(int p1,int p2){
		for(int i=1;i<=n;i++)
			swap(a[p1][i],a[p2][i]);
	}
	void exchange3(int x,int y){
		for(int i=2;i<=n;i++){
			double k=a[i][y];
			for(int j=1;j<=n;j++){
				a[i][j]-=a[x][j]*k;
			}
		}
	}
	void Gauss(){
		for(int j=1;j<=n;j++){
			double minx=114514;int p;
			for(int i=1;i<=n;i++){
				if(a[i][j]<minx){
					minx=a[i][j];
					p=i;
				}
			}
			exchange2(1,p); 
			exchange1(1,j);
			exchange3(1,j);
		}
	}
}mat;
int main(){
	cin>>mat.n;
	for(int i=1;i<=mat.n;i++)
		for(int j=1;j<=mat.n;j++)
			cin>>mat.a[i][j];
	mat.Gauss();
	for(int i=1;i<=mat.n;i++)
		cout<<mat.a[i][i]<<endl;
	
}
2023/3/22 21:45
加载中...