C语言 稀疏矩阵装置算法 就帮忙
#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;
} 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.j==col)
{
B->data.i=A->data.j;
B->data.j=A->data.i;
B->data.v=A->data.v;
q++;
}
}
}
void disp(int M[],int size)
{
int i,j;
for(i=0;i<size;i++)
{
for(j=0;j<6;j++)
printf("%4d",M);
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,A->data.j,A->data.v);
}
void InputMatrix(SPMatrix *A,int M[],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!=0)
{
A->data.i=i;
A->data.j=j;
A->data.v=M;
k++;
}
}
}
A->tu=k;
}
int main()
{
SPMatrix *SA,*SB;
int Matrix={{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);
}
这个是错误的 帮忙看看怎么改{void TransMatrix(SPMatrix *A,SPMatrix *B) }
本帖最后由 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;
} 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,cpot;
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=0;
for(i=1;i<=A->tu;i++)
{
j=A->data.j;
num++;
}
cpot=1;
for(i=2;i<=A->nu;i++)
cpot=cpot+num;
for(i=1;i<=A->tu;i++)
{
j=A->data.j;
k=cpot;
B->data.i=A->data.j;
B->data.j=A->data.i;
B->data.v=A->data.v;
cpot++;
}
}
return B;
}
void disp(int M[],int size)
{
int i,j;
for(i=0;i<size;i++)
{
for(j=0;j<6;j++)
printf("%4d",M);
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,A->data.j,A->data.v);
}
void InputMatrix(SPMatrix *A,int M[],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!=0)
{
A->data.i=i;
A->data.j=j;
A->data.v=M;
k++;
}
}
}
A->tu=k;
}
int main()
{
SPMatrix *SA,*SB;
int Matrix={{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);
}
还是出错求解 本帖最后由 12月30日 于 2014-3-9 15:45 编辑
不错不错长见识了 不错不错长见识了 12月30日 发表于 2014-3-9 15:43 static/image/common/back.gif
你能说下程序的目的(或者操作)是什么吗?
页:
[1]