|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);
- }
复制代码
|
|