1 solutions

  • 0
    @ 2024-12-10 22:03:04

    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