高斯消元 模板

struct Guass{//瓜丝
	db a[M][M];
	db res[M];
	int n,m;
	void init(int nn){
		n=nn;
		m=nn+1;//多一个常数项(我的写法里每个方程值为0,多一个常数项)
		memset(res,0,sizeof(res));
		memset(a,0,sizeof(a));
	}
	void xiao(int x,db ff,int y){
		for(int i=1;i<=m;i++)
			a[y][i]-=a[x][i]*ff;
	}
	void getres(){
		int i,j;
		db tp;
		res[m]=1;
		for(i=n;i>0;i--){
			tp=0;
			for(j=i+1;j<=m;j++) tp+=a[i][j]*res[j];
			res[i]=-tp/a[i][i];
		}
		res[m]=0;//复原,免得其它地方访问越界
	}
	void gauss(){
		int i,j,k=0;
		for(i=1;i<m;i++){
			k++;
			for(j=k;j<=n;j++)
			if(a[j][i]){
				swap(a[j],a[k]);
				break;
			}
			for(j=1;j<=n;j++)
			if(a[j][i]&&j!=k)
				xiao(k,a[j][i]/a[k][i],j);
		}
		getres();
	}
}GS;
posted @ 2017-02-20 17:21  _zwl  阅读(146)  评论(0编辑  收藏  举报