zoukankan      html  css  js  c++  java
  • C语言求矩阵的逆

    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    
    #define N 10
    
    int getA(int arcs[N][N], int n)//按第一行展开计算|A|
    {
        if (n == 1)
        {
            return arcs[0][0];
        }
        int ans = 0;
        int temp[N][N];
        int i, j, k;
        for (i = 0; i<n; i++)
        {
            for (j = 0; j<n - 1; j++)
            {
                for (k = 0; k<n - 1; k++)
                {
                    temp[j][k] = arcs[j + 1][(k >= i) ? k + 1 : k];
    
                }
            }
            int t = getA(temp, n - 1);
            if (i % 2 == 0)
            {
                ans += arcs[0][i] * t;
            }
            else
            {
                ans -= arcs[0][i] * t;
            }
        }
        return ans;
    }
    void getAStart(int arcs[N][N], int n, int ans[N][N])//计算每一行每一列的每个元素所对应的余子式,组成A*
    {
        if (n == 1)
        {
            ans[0][0] = 1;
            return;
        }
        int i, j, k, t;
        int temp[N][N];
        for (i = 0; i<n; i++)
        {
            for (j = 0; j<n; j++)
            {
                for (k = 0; k<n - 1; k++)
                {
                    for (t = 0; t<n - 1; t++)
                    {
                        temp[k][t] = arcs[k >= i ? k + 1 : k][t >= j ? t + 1 : t];
                    }
                }
    
    
                ans[i][j] = getA(temp, n - 1);
                if ((i + j) % 2 == 1)
                {
                    ans[i][j] = -ans[i][j];
                }
            }
        }
    }
    
    
    
    
    int main()
    {
        
        int arcs[N][N];
        int astar[N][N];
        int i, j;
        int n;
        while (scanf_s("%d", &n) != EOF && n)
        {
            for (i = 0; i<n; i++)
            {
                for (j = 0; j<n; j++)
                {
                    scanf_s("%d", &arcs[i][j]);
                }
            }
            int a = getA(arcs, n);
            if (a == 0)
            {
                printf("can not transform!
    ");
            }
            else
            {
                getAStart(arcs, n, astar);
                for (i = 0; i<n; i++)
                {
                    for (j = 0; j<n; j++)
                    {
                        printf("%.3lf ", (double)astar[i][j] / a);
                    }
                    printf("
    ");
                }
            }
            printf("
    ");
    
        }
        system("pause");
        return 0;
    }
  • 相关阅读:
    mysql的常用查询创建命令
    maven的简介
    google guava
    分库分表的情况下生成全局唯一的ID
    书单
    MD5Util
    UUID生成工具
    nodejs学习笔记三——nodejs使用富文本插件ueditor
    nodejs学习笔记二——链接mongodb
    mongodb 安装
  • 原文地址:https://www.cnblogs.com/junjunjun123/p/9180930.html
Copyright © 2011-2022 走看看