三元组转制问题
#include<stdio.h>#include<malloc.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define MAXSIZE 100
typedef int Status;
typedef int ElemType;
int c[2],g=0;
int d[100],f[100];//接受随即产生的三元组中i值,j值。
#define FALSE 0
typedef struct{
int i,j;
ElemType e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
Status cre(TSMatrix &M,int g)//判断随即产生的三元组是否已经产生过
{
int h,q,flag=0;
for(h=0;h<g-1;h++)
{
for(q=h+1;q<g;q++)
{
if(d[h]==d[q]&&f[h]==f[q])
{
d[q]=c[0]=rand()%M.mu;
f[q]=c[1]=rand()%M.nu;
cre(M,g);
}
}
}
return OK;
}
Status print(TSMatrix &M)//打印原三元组产生的矩阵
{
int a,b,k,flag;
for(a=0;a<M.mu;a++)
{
for(b=0;b<M.nu;b++)
{
flag=0;
for(k=1;k<=M.data[0].e;k++)
{
if(a==M.data[k].i&&b==M.data[k].j)
{
printf("%5d",M.data[k].e);
flag=1;
break;
}
}
if(flag==0)
printf("%5d",0);
}
printf("\n");
}
return OK;
}
Status Input(TSMatrix &M,int m,int n) //输入m行n列的矩阵存储到三元组表M中
{
int k,x,h;
printf("请输入矩阵的行数和列数:");
scanf("%d%d",&M.mu,&M.nu);
M.data[0].i=M.mu;
M.data[0].j=M.nu;
printf("输入非零元素的个数tu:");
scanf("%d",&M.tu);
srand((unsigned)time(0));
M.data[0].e=M.tu;
for(k=1;k<=M.tu;k++)
{
c[0]=d[g]=m=rand()%M.mu;
c[1]=f[g]=n=rand()%M.nu;
g++;
if(k>1)
cre(M,g);
x=rand()%100+1;
M.data[k].i=c[0];
M.data[k].j=c[1];
M.data[k].e=x;
}
printf("随即生成的三元组为:\n");
for(k=1;k<=M.tu;k++)
{
printf("%3d%3d%3d\n",M.data[k].i,M.data[k].j,M.data[k].e);
}
printf("化为矩阵为:\n");
print(M);
return OK;
}
Status Transpose(TSMatrix M,TSMatrix &T)//将M转置为T
{
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
int col,t,p,q;
int num[10];
int cpot[10];
if(T.tu)
{
for(col=1;col<=M.nu;col++)
num[col]=0; //表示矩阵M种第col列中非零元素个数
for(t=1;t<=M.tu;t++)
num[M.data[t].j]++;//求M中每一列含非零元的个数
cpot[1]=1;//cpot[col]表示M中第col列第一个非零元素在T.data中的恰当位置
for(col=2;col<=M.nu;col++)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;p++)
{
col=M.data[p].j;
q=cpot[col];
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;
cpot[col]++;
}//for语句
}//if语句
return OK;
}
Status Output(TSMatrix &T)//打印T对应的矩阵形式
{
int i,j,k,flag;
for(i=1;i<=T.mu;i++)
{
for(j=1;j<=T.nu;j++)
{
flag=0;
for(k=1;k<=T.data[0].e;k++)
{
if(T.data[k].i==i&&T.data[k].j==j)
{
printf("%3d\n:",T.data[k].e);
flag=1;
}
}
if(flag==0)
printf("%3d",0);
}
printf("\n");
}
return OK;
}
void main()
{
TSMatrix M,T;
int m=0,n=0;
Input(M,m,n);//产生原矩阵并打印
Transpose(M,T);//转制
Output(T);//输出
}
不知道哪里错了 如果屏蔽掉主函数的Transpose和output函数 运行是对的 但是一加上就错了。
求解~0rz。