还是三元组转制问题 不过这次对了
https://bbs.bccn.net/viewthread.php?tid=326358&page=1#pid1878475上面的是上次写的不对的程序。不知道怎么搞的 总不能回复。
嗯 现在是对了。 上上个星期弄出来 现在来结贴。- +
这是一个10*10矩阵。
[附件ID:attach_1名称:QQ截图未命名.jpg][附件ID:attach_3名称:_$4W}T{GW3H1IGQ@UAXOSZ5.jpg]
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define FALSE 0
#define MAXSIZE 100
typedef int Status;
typedef int ElemType;
int c[2],g=0; //全局变量 用来接收产生的随机行、列数
int d[100],f[100]; //接收随即产生的三元组中所有产生过的i,j值。用来与新产生的行列数i,j值比较 若都相同 则重新产生行列数i,j
typedef struct{
int i,j;
ElemType e;
}Triple;//三元组定义
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;//给三元组添加行mu、列nu、值tu。三个元素
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+1;
f[q]=c[1]=rand()%M.nu+1;
cre(M,g);
}
}
}
return OK;
}
Status print(TSMatrix &M)//打印原三元组产生的矩阵
{
int a,b,k,flag;
for(a=1;a<=M.mu;a++)
{
for(b=1;b<=M.nu;b++)
{
flag=0;
for(k=1;k<=M.tu;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中 m<=10 n<=10
{
int k,x;
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+1;
c[1]=f[g]=n=rand()%M.nu+1;
g++;
if(k>1)
cre(M,g);
M.data[k].i=c[0];
M.data[k].j=c[1];
x=rand()%100+1;
M.data[k].e=x;
}
printf("随即生成的三元组为:\n");
printf(" mu nu e\n");
for(k=1;k<=M.tu;k++)
{
printf("%3d%3d%4d\n",M.data[k].i,M.data[k].j,M.data[k].e);
}
printf("转制前矩阵为:\n");
return OK;
}
Status Transpose(TSMatrix M,TSMatrix &T)//按行优先进行将M转制成T 既原来M中的行变成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]++; //中每一列含非零元的个数
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;
}
void main()
{
TSMatrix M,T;
int m=0,n=0;
Input(M,m,n);//产生原矩阵并打印
print(M);
Transpose(M,T);//转制
printf("转制后的矩阵为:\n");
print(T);
}