-->
当前位置:首页 > 题库 > 正文内容

程序填空题:三元组顺序表表示的稀疏矩阵转置Ⅱ

Luz4年前 (2021-05-10)题库1127
三元组顺序表表示的稀疏矩阵转置Ⅱ。设a和b为三元组顺序表变量,分别表示矩阵M和T。要求按照a中三元组的次序进行转置,并将转置后的三元组置入b中恰当的位置。

### 输入格式:

输入第1行为矩阵行数m、列数n及非零元素个数t。
按行优先顺序依次输入t行,每行3个数,分别表示非零元素的行标、列标和值。

### 输出格式:
输出转置后的三元组顺序表结果,每行输出非零元素的行标、列标和值,行标、列标和值之间用空格分隔,共t行。

### 输入样例1:

```in
3 4 3
0 1 -5
1 0 1
2 2 2
```

### 输出样例1:

```out
0 1 1
1 0 -5
2 2 2
```

```
#include
#include
#define M 100
struct node{
int i,j,v;
};

struct tripletable
{
struct node S[M];
int m,n,t;
};


struct tripletable * create()
{ int i;
struct tripletable *head=(struct tripletable *)malloc(sizeof(struct tripletable));
scanf("%d%d%d",&(head->m),&(head->n),&(head->t));

for(i=0;it;i++)
scanf("%d%d%d",&(head->S[i].i),&(head->S[i].j),&(head->S[i].v));
return head;

}


void print(struct tripletable * head)
{
int i;
for(i=0;it;i++)
printf("%d %d %d\n",(head->S[i].i),(head->S[i].j),(head->S[i].v));
}

struct tripletable * trans(struct tripletable *t1)
{
int i,p,j,q,k;
int num[100];
int cpot[100];
struct tripletable *t2=(struct tripletable *)malloc(sizeof(struct tripletable));
t2->m=t1->n;t2->n=t1->m;t2->t=t1->t;
if(t1->t) {
for(i=0;in;i++) num[i]=0;
for(i=0;it;i++) {k=@@[t1->S[i].j](2);++num[k];}
cpot[0]=0;
for(i=1;in;i++) cpot[i]=@@[cpot[i-1]+num[i-1]](2);
for(p=0;pt;p++){
j=t1->S[p].j; @@[q=cpot[j]](2);
t2->S[q].i=t1->S[p].j;t2->S[q].j=t1->S[p].i;
t2->S[q].v=t1->S[p].v;
@@[++cpot[j]](2);
}

}
return t2;
}

int main()
{
struct tripletable * head,*t2;
head=create();
t2=trans(head);
print(t2);
return 0;
}

```






答案:
第1空:t1->S[i].j

第2空:cpot[i-1]+num[i-1]

第3空:q=cpot[j]

第4空:++cpot[j]

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。