找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 524|回复: 0

[代码] 求逆矩阵(C)

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2017-9-8 09:51:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. #include<stdio.h>  
  2. #define N 10  
  3. int getA(int arcs[N][N],int n)//按第一行展开计算|A|  
  4. {  
  5.         if(n==1)  
  6.         {  
  7.                 return arcs[0][0];  
  8.         }  
  9.         int ans = 0;  
  10.         int temp[N][N];  
  11.         int i,j,k;  
  12.         for(i=0;i<n;i++)  
  13.         {  
  14.                 for(j=0;j<n-1;j++)  
  15.                 {  
  16.                         for(k=0;k<n-1;k++)  
  17.                         {  
  18.                                 temp[j][k] = arcs[j+1][(k>=i)?k+1:k];  

  19.                         }  
  20.                 }  
  21.                 int t = getA(temp,n-1);  
  22.                 if(i%2==0)  
  23.                 {  
  24.                         ans += arcs[0]*t;  
  25.                 }  
  26.                 else  
  27.                 {  
  28.                         ans -=  arcs[0]*t;  
  29.                 }  
  30.         }  
  31.         return ans;  
  32. }  
  33. void getAStart(int arcs[N][N],int n,int ans[N][N])//计算每一行每一列的每个元素所对应的余子式,组成A*  
  34. {  
  35.         if(n==1)  
  36.         {  
  37.                 ans[0][0] = 1;  
  38.                 return;  
  39.         }  
  40.         int i,j,k,t;  
  41.         int temp[N][N];  
  42.         for(i=0;i<n;i++)  
  43.         {  
  44.                 for(j=0;j<n;j++)  
  45.                 {  
  46.                         for(k=0;k<n-1;k++)  
  47.                         {  
  48.                                 for(t=0;t<n-1;t++)  
  49.                                 {  
  50.                                         temp[k][t] = arcs[k>=i?k+1:k][t>=j?t+1:t];  
  51.                                 }  
  52.                         }  


  53.                         ans[j]  =  getA(temp,n-1);  
  54.                         if((i+j)%2 == 1)  
  55.                         {  
  56.                                 ans[j] = - ans[j];  
  57.                         }  
  58.                 }  
  59.         }  
  60. }  

  61. int main()  
  62. {  
  63.         int arcs[N][N];  
  64.         int astar[N][N];  
  65.         int i,j;  
  66.         int n;  
  67.         while(scanf("%d",&n)!=EOF && n)  
  68.         {  
  69.                 for(i=0;i<n;i++)  
  70.                 {  
  71.                         for(j=0;j<n;j++)  
  72.                         {  
  73.                                 scanf("%d",&arcs[j]);  
  74.                         }  
  75.                 }  

  76.                 int a = getA(arcs,n);  
  77.                 if(a==0)  
  78.                 {  
  79.                         printf("can not transform!\n");  
  80.                 }  
  81.                 else  
  82.                 {  
  83.                         getAStart(arcs,n,astar);  
  84.                         for(i=0;i<n;i++)  
  85.                         {  
  86.                                 for(j=0;j<n;j++)  
  87.                                 {  
  88.                                         printf("%.3lf ",(double)astar[j]/a);  
  89.                                 }  
  90.                                 printf("\n");  
  91.                         }  
  92.                 }  
  93.                 printf("\n");  

  94.         }  
  95.         return 0;  
  96. }


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-24 06:40 , Processed in 0.322022 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表