锯齿矩阵是指每一行包含的元素个数不相同的矩阵。
初始时矩阵为空,读入 mm 对整数 (x,y)(x,y),表示在第 xx 行的末尾加上一个元素 yy。
输出最终的锯齿矩阵。
输入格式
第一行输入两个整数 n,m\ (1 \leq n,m \leq 10000)n,m (1≤n,m≤10000),其中 nn 表示锯齿数组的行数,mm 表示插入的元素总数。
接下来一共 mm 行,每行两个整数 x,y\ (1 \leq x \leq n, 0 \leq y \leq 10000)x,y (1≤x≤n,0≤y≤10000),表示在第 xx 行的末尾插入一个元素 yy。
输出格式
一共输出 nn 行,每行若干个用空格分隔的整数。如果某行没有任何元素,则输出一个空行。
#include<stdio.h>
#include<stdlib.h>
#define M 10010
typedef struct ANode{
int num;
struct ANode *next;
}ArcNode;
int main(){
int n,m;
int i,j;
int x,y;
ArcNode *p;
scanf("%d%d",&n,&m);
ArcNode * head[n];
ArcNode * rear[n];
for(i=0;i<n;i++){
head[i]=(ArcNode*)malloc(sizeof(ArcNode));
head[i]->next=NULL;
rear[i]=(ArcNode*)malloc(sizeof(ArcNode));
rear[i]=head[i];
}
for(i=0;i<m;i++){
scanf("%d%d",&x,&y);
p=(ArcNode*)malloc(sizeof(ArcNode));
p->num=y;
p->next=NULL;
rear[x-1]->next=p;
rear[x-1]=p;
}
for(i=0;i<n;i++){
p=head[i]->next;
if(p==NULL) printf("\n");
else {
while(p!=NULL)
{printf("%d ",p->num);
p=p->next;}
printf("\n");
}
}
return 0;
}