鱼C论坛

 找回密码
 立即注册
查看: 2529|回复: 5

C语言 稀疏矩阵装置算法 就帮忙

[复制链接]
发表于 2014-3-9 14:40:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
#include<stdio.h>
#include<stdlib.h>
#define SMAX 1024
typedef int datatype;
typedef struct
{
        int i,j;
        datatype v;
}SPNode;
typedef struct
{
        int mu,nu,tu;
        SPNode data[SMAX];       
} SPMatrix;
void InitMatrix(SPMatrix *A)
{
        A->mu=0;
        A->nu=0;
        A->tu=0;
}
void TransMatrix(SPMatrix *A,SPMatrix *B)
{
        int p,q,col;
        B->mu=A->nu;
        B->nu=A->mu;
        B->tu=A->tu;
        if(B->tu>0)
        {
                q=0;
                for(col=0;col<=A->nu;col++)
                        for(p=0;p<=A->tu;p++)
                                if(A->data[p].j==col)
                                {
                                        B->data[q].i=A->data[p].j;
                                        B->data[q].j=A->data[p].i;
                                        B->data[q].v=A->data[p].v;
                                        q++;
                                }
        }
}
void disp(int M[][6],int size)
{
        int i,j;
        for(i=0;i<size;i++)
                {
                        for(j=0;j<6;j++)
                        printf("%4d",M[i][j]);
                        printf("\n");
                }
}
void disp3(SPMatrix *A,int size)
{
        int i;
        printf("%4d%4d%4d\n",A->mu,A->nu,A->tu);
        for(i=0;i<size;i++)
                printf("%4d%4d%4d\n",A->data[i].i,A->data[i].j,A->data[i].v);
}
void InputMatrix(SPMatrix *A,int M[][6],int m,int n,int size)
{
        int i,j,k=0;
        A->mu=m;
        A->nu=n;
        for(i=0;i<size;i++)
                {
                        for(j=0;j<6;j++)
                        {
                                if(M[i][j]!=0)
                                {
                                        A->data[k].i=i;
                                        A->data[k].j=j;
                                        A->data[k].v=M[i][j];
                                        k++;
                                }
                        }
                }
        A->tu=k;
}
int main()
{
        SPMatrix *SA,*SB;
        int Matrix[6][6]={{3},{0,6,0,0,1,7},{0,0,2},{0},{0,0,0,0,50},{0,0,0,0,0,9}};
        disp(Matrix,6);
        SA=(SPMatrix*)malloc(sizeof(SPMatrix));
        SB=(SPMatrix*)malloc(sizeof(SPMatrix));
        InitMatrix(SA);
        InitMatrix(SB);
        InputMatrix(SA,Matrix,6,6,6);
        printf("稀疏矩阵三元组:\n");
        disp3(SA,7);
        TransMatrix(SA,SB);
        printf("稀疏矩阵转置后:\n");
        disp3(SB,7);
}
错误.png 这个是错误的 帮忙看看怎么改{void TransMatrix(SPMatrix *A,SPMatrix *B)   }

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-9 15:42:40 | 显示全部楼层
本帖最后由 12月30日 于 2014-3-9 15:44 编辑

#include<stdio.h>
#include<stdlib.h>
#define SMAX 1024
typedef int datatype;
typedef struct
{
        int i,j;
        datatype v;
}SPNode;
typedef struct
{
        int mu,nu,tu;
        SPNode data[SMAX];        
} SPMatrix;
void InitMatrix(SPMatrix *A)
{
        A->mu=0;
        A->nu=0;
        A->tu=0;
}
SPMatrix *TransMatrix(SPMatrix *A)
{
        SPMatrix *B;
        int i,j,k;
        int num[8],cpot[8];
        B=(SPMatrix*)malloc(sizeof(SPMatrix));
        B->mu=A->nu;
        B->nu=A->mu;
        B->tu=A->tu;
        if(B->tu>0)
        {
                for(i=1;i<=A->tu;i++)
                        num[i]=0;
                for(i=1;i<=A->tu;i++)
                        {
                                j=A->data[i].j;
                                num[j]++;
                        }
                cpot[1]=1;
                for(i=2;i<=A->nu;i++)
                cpot[i]=cpot[i-1]+num[i-1];
                for(i=1;i<=A->tu;i++)
                {
                        j=A->data[i].j;
                        k=cpot[j];
                        B->data[k].i=A->data[k].j;
                        B->data[k].j=A->data[k].i;
                        B->data[k].v=A->data[k].v;
                        cpot[j]++;
                }
        }
        return B;
}
void disp(int M[][6],int size)
{
        int i,j;
        for(i=0;i<size;i++)
                {
                        for(j=0;j<6;j++)
                        printf("%4d",M[i][j]);
                        printf("\n");
                }
}
void disp3(SPMatrix *A,int size)
{
        int i;
        printf("%4d%4d%4d\n",A->mu,A->nu,A->tu);
        for(i=0;i<size;i++)
                printf("%4d%4d%4d\n",A->data[i].i,A->data[i].j,A->data[i].v);
}
void InputMatrix(SPMatrix *A,int M[][6],int m,int n,int size)
{
        int i,j,k=0;
        A->mu=m;
        A->nu=n;
        for(i=0;i<size;i++)
                {
                        for(j=0;j<6;j++)
                        {
                                if(M[i][j]!=0)
                                {
                                        A->data[k].i=i;
                                        A->data[k].j=j;
                                        A->data[k].v=M[j];
                                        k++;
                                }
                        }
                }
        A->tu=k;
}
int main()
{
        SPMatrix *SA,*SB;
        int Matrix[6][6]={{3},{0,6,0,0,1,7},{0,0,2},{0},{0,0,0,0,50},{0,0,0,0,0,9}};
        disp(Matrix,6);
        SA=(SPMatrix*)malloc(sizeof(SPMatrix));
        SB=(SPMatrix*)malloc(sizeof(SPMatrix));
        InitMatrix(SA);
        InitMatrix(SB);
        InputMatrix(SA,Matrix,6,6,6);
        printf("稀疏矩阵三元组:\n");
        disp3(SA,7);
        SB=TransMatrix(SA);
        printf("稀疏矩阵转置后:\n");
        disp3(SB,7);
}

      


还是出错求解
[/i][/i][/i][/i][/i][/i][/i][/i][/i]
QQ截图20140309154237.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-9 15:43:50 | 显示全部楼层
本帖最后由 12月30日 于 2014-3-9 15:45 编辑

QQ截图20140309154237.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-27 21:51:42 | 显示全部楼层
不错  不错  长见识了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-27 21:53:39 | 显示全部楼层
不错  不错  长见识了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-28 15:20:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 11:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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