关于稀疏矩阵求行列式及其余子式

来源:互联网 发布:apache kylin视频教程 编辑:程序博客网 时间:2024/05/09 19:01
//最近在做数据结构课程设计的时候遇到问题,//关于矩阵求逆,必须先求行列式及余子式。int JsMatrix(int s[][MAXSIZE], int n)//求行列式{int i, j, k, r, total = 0;int b[MAXSIZE][MAXSIZE];//在使用递归时,必须有一个明确的递归结束条件,称为递归出口//当矩阵只有一个元素时,total = s[0][0]//当矩阵只有两行,两列时,total = s[0][0]*s[1][1]-s[0][1]*s[1][0]    if (n == 1)    {    total = s[0][0];    }    else if (n == 2)    {    total = s[0][0]*s[1][1]-s[0][1]*s[1][0];    }    else    {    for (i = 0; i < n; i++)    {        for (j = 0; j < n-1; j++)        {            for (k = 0; k < n-1; k++)            {            //此处的if else 是为了去掉某元素所在的行及所在的列。            //从而构造新的数组调用递归            if (k >= i)            {            b[j][k]=s[j+1][k+1];            }            else            {            b[j][k] = s[j+1][k];            }            }        }    if (i % 2 == 0)    {    r = s[0][i] * JsMatrix(b, n-1);//递归调用函数    }    else    {    r = (-1) * s[0][i] * JsMatrix(b, n-1);//递归调用函数    }    total += r;    }    }return total;}void N1Matrix(int s[][MAXSIZE], int b[][MAXSIZE], int n)//求余子式{int i, j, k, l, m, g, d[MAXSIZE][MAXSIZE];    for (i = 0; i < n; i++)    {    m = i;        for (j = 0; j < n; j++)        {        g = j;            for (k = 0; k < n-1; k++)            {                for (l = 0; l < n-1; l++)                {                //此处的if else 是为了去掉某元素所在的行及所在列。                //从而构造新的数组调用递归                if (k >= m && l >= g)                {                    d[k][l] = s[k+1][l+1];                }                else if (k < m && l >= g)                {                    d[k][l] = s[k][l+1];                }                else if (k >= m && l < g)                {                    d[k][l] = s[k+1][l];                }                else                {                    d[k][l] = s[k][l];                }                }            }        b[i][j]=JsMatrix(d, n-1);//存放每个元素所对应的余子式        }    }}


1 0
原创粉丝点击