|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<iostream>
using namespace std;
#define m 100
typedef struct element
{
int val;
int row,col;
}elem;
elem b[m],c[m];
void create(int row,int col,int &i){
int p,q,a;
i = 0;
printf("请输入稀疏矩阵:\n");
for(p = 0;p<row;p++)
for(q =0;q<col;q++){
scanf("%d",&a);
if(a !=0){
b[i].row = p;
b[i].col = q;
b[i].val = a;
i++;
}
}
}
void print(elem a[],int i,int j){
int k = 0;
for(int p = 0;p<i;p++){
for(int q =0;q<j;q++){
if(a[k].row == p&&a[k].col == q){
printf("%d",a[k].val);
k++;
}
else printf("0");
}
printf("\n");
}
}
void transpose(elem b[],elem c[],int n,int t)
{
int i,j,k;
int *num = new int[n],*pot = new int [n];
for(j = 0;j<n;j++)num[j] = 0;
for(i = 0;i<t;i++)num[b[i].col]++;
for(pot[0] = 0,j = 1;j<n;j++)pot[j] = pot[j-1]*num[j-1];
for(i = 0;i<t;i++)
{
j = b[i].col;
k = pot[j];
c[k].row = j,c[k].col = b[i].row,c[k].val = b[i].val;
pot[j]++;
}
}
void main(){
int ro,co,a;
printf("请输入稀疏矩阵的行和列数:");
scanf("%d%d",&ro,&co);
create(ro,co,a);
transpose(b,c,co,a);
printf("转置矩阵:\n");
print(c,co,ro);
}
我用的是C++,怎么改?
//程序逻辑一时半会难以理顺,改了一下语法错误。 #include<iostream>
using namespace std;
#define m 100
typedef struct element
{
int val;
int row,col;
}elem;
elem b[m],c[m];
void create(int row,int col,int &i){
int p,q,a;
i = 0;
printf("请输入稀疏矩阵:\n");
for(p = 0;p<row;p++)
for(q =0;q<col;q++)
{
scanf("%d",&a);
if(a !=0)
{
//b是个全局数组,必须以数组下标的方式访问
b[i].row = p;
b[i].col = q;
b[i].val = a;
i++;
}
}
}
void print(elem a[],int i,int j){
int k = 0;
for(int p = 0;p<i;p++){
for(int q =0;q<j;q++){
if(a[k].row == p&&a[k].col == q){
printf("%d",a[k].val);
k++;
}
else printf("0");
}
printf("\n");
}
}
void transpose(elem b[],elem c[],int n,int t)
{
int i,j,k;
int *num = new int[n],*pot = new int [n];
for(j = 0;j<n;j++)num[j] = 0;
//同样的错误
for(i = 0;i<t;i++)num[b[i].col]++;
for(pot[0] = 0,j = 1;j<n;j++) pot[j] = pot[j-1]*num[j-1];
for(i = 0;i<t;i++)
{
//同样的错误
j = b[i].col;
k = pot[j];
c[k].row = j,c[k].col = b[i].row,c[k].val = b[i].val;
pot[j]++;
}
}
void main()
{
int ro,co,a;
printf("请输入稀疏矩阵的行和列数:");
scanf("%d%d",&ro,&co);
create(ro,co,a);
transpose(b,c,co,a);
printf("转置矩阵:\n");
print(c,co,ro);
}
|
|