1 solutions
-
0
C :
#include <stdio.h> int main() { int s[12501]; int m,n; while(scanf("%d%d",&m,&n)!=EOF) { for(int i=0;i<m*n;i++) { scanf("%d",&s[i]); } for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { printf("%d",s[n*i+j]); if(j==n-1)printf(" \n"); else printf(" "); } } } return 0; }
C++ :
#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 typedef int Status; /* 函数结果状态代码,如OK等 */ #define MAXSIZE 12500 /* 非零元个数的最大值 */ #define MAXRC 200 /* 最大行列数 */ typedef struct OLNode { int i,j; /* 该非零元的行和列下标 */ int e; /* 非零元素值 */ struct OLNode *right,*down; /* 该非零元所在行表和列表的后继链域 */ }OLNode,*OLink; typedef struct { OLink *rhead,*chead; /* 行和列链表头指针向量基址,由CreatSMatrix_OL()分配 */ int mu,nu,tu; /* 稀疏矩阵的行数、列数和非零元个数 */ }CrossList; Status InitSMatrix(CrossList *M) { /* 初始化M(CrossList类型的变量必须初始化,否则创建、复制矩阵将出错) */ (*M).rhead=(*M).chead=NULL; (*M).mu=(*M).nu=(*M).tu=0; return OK; } Status DestroySMatrix(CrossList *M) { /* 初始条件: 稀疏矩阵M存在。操作结果: 销毁稀疏矩阵M */ int i; OLNode *p,*q; for(i=1;i<=(*M).mu;i++) { /* 按行释放结点 */ p=*((*M).rhead+i); while(p) { q=p; p=p->right; free(q); } } free((*M).rhead); free((*M).chead); (*M).rhead=(*M).chead=NULL; (*M).mu=(*M).nu=(*M).tu=0; return OK; } Status CreateSMatrix(CrossList *M) { /* 创建稀疏矩阵M,采用十字链表存储表示。算法5.4 */ int i,j,k,m,n,t; int e; OLNode *p,*q; if((*M).rhead) DestroySMatrix(M); scanf("%d%d",&m,&n); (*M).mu=m; (*M).nu=n; (*M).rhead=(OLink*)malloc((m+1)*sizeof(OLink)); if(!(*M).rhead) exit(-1); (*M).chead=(OLink*)malloc((n+1)*sizeof(OLink)); if(!(*M).chead) exit(-1); for(k=1;k<=m;k++) /* 初始化行头指针向量;各行链表为空链表 */ (*M).rhead[k]=NULL; for(k=1;k<=n;k++) /* 初始化列头指针向量;各列链表为空链表 */ (*M).chead[k]=NULL; (*M).tu=0; for(i=1;i<=m;i++) for(j=1;j<=n;j++) { scanf("%d",&e); if(e==0) continue; (*M).tu++; p=(OLNode*)malloc(sizeof(OLNode)); if(!p) exit(-1); p->i=i; /* 生成结点 */ p->j=j; p->e=e; if((*M).rhead[i]==NULL||(*M).rhead[i]->j>j) { /* p插在该行的第一个结点处 */ p->right=(*M).rhead[i]; (*M).rhead[i]=p; } else { /* 寻查在行表中的插入位置 */ for(q=(*M).rhead[i];q->right&&q->right->j<j;q=q->right); p->right=q->right; /* 完成行插入 */ q->right=p; } if((*M).chead[j]==NULL||(*M).chead[j]->i>i) { /* p插在该列的第一个结点处 */ p->down=(*M).chead[j]; (*M).chead[j]=p; } else {/* 寻查在列表中的插入位置 */ for(q=(*M).chead[j];q->down&&q->down->i<i;q=q->down); p->down=q->down; /* 完成列插入 */ q->down=p; } } return OK; } Status PrintSMatrix(CrossList M) { /* 初始条件: 稀疏矩阵M存在。操作结果: 按行或按列输出稀疏矩阵M */ int i,j; OLink p; for(i=1;i<=M.mu;i++) { p=M.rhead[i]; for(j=1;j<=M.nu;j++) { if (p && p->j == j) { printf("%d ", p->e); p=p->right; } else { printf("0 "); } } puts(""); } return OK; } int main() { CrossList M; InitSMatrix(&M); CreateSMatrix(&M); PrintSMatrix(M); }
- 1
Information
- ID
- 519
- Time
- 1000ms
- Memory
- 32MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By