1. /*
  2. 高斯消元模板题
  3. n维球体确定圆心必须要用到n+1个点
  4. 设圆心坐标(x1,x2,x3,x4...xn),半径为C
  5. 设第i个点坐标为(ai1,ai2,ai3,,,ain)那么对应的方程为
  6. (x1-ai1)^2+(x2-ai2)^2+...+(xn-ain)^2=C*C
  7. 如此可列出n+1个方程但是由于有 xi^2 在,无法高斯消元
  8. 所以将这n+1个方程上下相减,得
  9. 2(x[1]*a[i][1]-x[1]a[i+1][1])+(a[i][1]^2-a[i+1][1]^2)...=0
  10. 那么化简后就是
  11. sum{2*x[j]*(a[i][j]-a[i+1][j])}=sum{a[i][j]^2-a[i+1][j]^2}
  12. 那么可以用高斯消元做了!
  13. */
  14. #include<bits/stdc++.h>
  15. using namespace std;
  16. double A[][],C[][],B[];//系数矩阵,常数矩阵
  17. int n;
  18. int main(){
  19. cin>>n;
  20. for(int i=;i<=n+;i++)
  21. for(int j=;j<=n;j++)
  22. cin>>A[i][j];//输入n+1个点的坐标
  23. for(int i=;i<=n;i++)//处理出增广矩阵
  24. for(int j=;j<=n;j++){
  25. C[i][j]=*(A[i][j] - A[i+][j]);
  26. B[i]+=(A[i][j]*A[i][j] - A[i+][j]*A[i+][j]);
  27. }
  28. //高斯消元!
  29. for(int i=;i<=n;i++){
  30. //找到xi系数不为0的第一个方程,并将其移到第i个方程处
  31. for(int j=i;j<=n;j++){
  32. if(C[j][i]>1e-){
  33. for(int k=;k<=n;k++)
  34. swap(C[i][k],C[j][k]);
  35. swap(B[i],B[j]);
  36. }
  37. }
  38. //用xi的系数去消其余方程的系数
  39. for(int j=;j<=n;j++){
  40. if(j==i)continue;
  41. double r=C[j][i]/C[i][i];
  42. for(int k=;k<=n;k++)
  43. C[j][k]-=r*C[i][k];
  44. B[j]-=r*B[i];
  45. }
  46. }
  47. for(int i=;i<=n;i++)
  48. printf("%.3lf ",B[i]/C[i][i]);
  49. }

那么下面就是高斯消元的模板,其中C是系数矩阵,B是常数矩阵

  1. //高斯消元!
  2. for(int i=;i<=n;i++){
  3. //找到xi系数不为0的第一个方程,并将其移到第i个方程处
  4. for(int j=i;j<=n;j++){
  5. if(C[j][i]>1e-){
  6. for(int k=;k<=n;k++)
  7. swap(C[i][k],C[j][k]);
  8. swap(B[i],B[j]);
  9. }
  10. }
  11. //用xi的系数去消其余方程的系数
  12. for(int j=;j<=n;j++){
  13. if(j==i)continue;
  14. double r=C[j][i]/C[i][i];
  15. for(int k=;k<=n;k++)
  16. C[j][k]-=r*C[i][k];
  17. B[j]-=r*B[i];
  18. }
  19. }

标准板子

  1. void guess(int equ,int var){ //行,列
  2. int k=,col=,max_r;//行 列 最大列
  3. for(k=,col=;k<=equ&&col<var;k++,col++){
  4. max_r=k;
  5. for(int i=k+;i<=equ;i++){//寻找当前最大
  6. if(fabs(mat[i][col])-fabs(mat[max_r][col])>eps)
  7. max_r=i;
  8. }
  9. if(max_r!=k){//如果不是,就换过来
  10. for(int j=;j<=var;j++) swap(mat[max_r][j],mat[k][j]);
  11. }
  12. if(fabs(mat[k][col])<eps){//如果已经为0,行不变,移到下一列
  13. k--;
  14. continue;
  15. }
  16. for(int i=k+;i<=equ;i++){
  17. if(fabs(mat[i][col])>eps){
  18. double t=mat[i][col]/mat[k][col];
  19. mat[i][col]=0.0;
  20. for(int j=col+;j<=var;j++)
  21. mat[i][j]-=mat[k][j]*t;
  22. }
  23. }
  24. }
  25. for(int i=equ;i>=;i--){
  26. if(fabs(mat[i][i])<eps) continue;
  27. double tmp=mat[i][var];
  28. for(int j=i+;j<var;j++)
  29. if(mat[i][j]!=)
  30. tmp-=mat[i][j]*x[j];
  31. x[i]=tmp/mat[i][i];
  32. }
  33. }

高斯消元模板!!!bzoj1013的更多相关文章

  1. HDU 3359 高斯消元模板题,

    http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 ...

  2. 【Luogu】P3389高斯消元模板(矩阵高斯消元)

    题目链接 高斯消元其实是个大模拟qwq 所以就着代码食用 首先我们读入 ;i<=n;++i) ;j<=n+;++j) scanf("%lf",&s[i][j]) ...

  3. 【转】高斯消元模板 by kuangbin

    写的很好,注释很详细,很全面. 原blog地址:http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html #include< ...

  4. kuangbin大佬的高斯消元模板

    dalao解释的博客 #include <bits/stdc++.h> using namespace std; ; int a[MAXN][MAXN];//增广矩阵 int x[MAXN ...

  5. 高斯消元模板(pascal)

    洛谷P3389评测 program rrr(input,output); const eps=1e-8; var a:..,..]of double; n,i,j,k:longint; t:doubl ...

  6. java高斯消元模板

    //package fuc; import java.io.PrintStream; import java.math.BigInteger; import java.util.Scanner; pu ...

  7. BZOJ1013 [JSOI2008]球形空间产生器sphere(高斯消元)

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4846  Solved: 2525[Subm ...

  8. NEFU 503 矩阵求解 (非01异或的高斯消元)

    题目链接 中文题,高斯消元模板题. #include <iostream> #include <cstdio> #include <cmath> #include ...

  9. hdu4418(概率dp + 高斯消元)

    应该是一个入门级别的题目. 但是有几个坑点. 1. 只选择x能到达的点作为guass中的未知数. 2. m可能大于n,所以在构建方程组时未知数的系数不能直接等于,要+= 3.题意貌似说的有问题,D为- ...

随机推荐

  1. 电路板上的元件R,T,D,C,U

    参考链接: https://zhidao.baidu.com/question/194132005.html

  2. ionic3安装

    1.安装 1)安装nodejs: 官网下载安装 2)可选安装 cnpm:  //安装了cnpm后,以后用到npm安装的东西都可以把npm替换成cnpm npm install -g cnpm --re ...

  3. python笔记(一)获取当前目录路径和文件

    一.获取当前路径 1.使用sys.argv[0] import sys print sys.argv[0]#输出#本地路径 2.os模块 import os print os.getcwd() #获取 ...

  4. mysql 8.0 ~ 存储和账户

    一 简介:关于存储数据文件的改进二 数据文件:   1合并了存储数据库对象信息的事务性数据字典       1 相关文件等存储引擎层存储元数据文件已消失,只有ibd文件,元数据存储在数据字典表    ...

  5. Social Grouping for Multi-Target Tracking and Head Pose Estimation in Video(翻译)

    0 - ABSTRACT 许多计算机任务在缺少上下文信息的情况下的处理会更加困难.例如,在多相机跟踪任务下,行人可能在不同照相机下面因为有这不同的姿势和灯光条件而看起来很不一样.类似地,在低分辨率高角 ...

  6. 使用Windows命令行启动关闭服务(net,sc用法)

    下面两个命令最好以管理员方式启动cmd窗口,否则出现权限问题. 1.net用于打开没有被禁用的服务, NET命令是功能强大的以命令行方式执行的工具. 它包含了管理网络环境.服务.用户.登陆大部分重要的 ...

  7. 解决 Qt5 报错 This application failed to start because it could not find or load the Qt platform plugin

    QT为了简化生成发布版本,特别提供了工具 "windeplayqt.exe",这个工具在 "...\Qt5.8.0\5.8\msvc2015_64\bin"的目 ...

  8. SpringBoot单元测试示例

    ⒈控制器Action示例 package cn.coreqi.controller; import org.junit.Test; import org.junit.runner.RunWith; i ...

  9. 【转】PyQt5开发环境配置并使用

    [转]PyQt5开发环境配置并使用 https://blog.csdn.net/HuangZhang_123/article/details/78046706 本人新书<玩转Python网络爬虫 ...

  10. vmware Harbor 复制功能试用

    vmware Harbor 复制功能试用 Harbor基于策略的Docker镜像复制功能,可在不同的数据中心.不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作. 功 ...