#include<stdio.h>
#include<stdlib.h>
typedef struct node{//十字链表 输入三元组返回矩阵 int row,col,val;struct node *down,*right;
}JD,*J;
typedef struct {J *rhead,*chead;int mu,nu,tu;//行列非0元
}CS;
CS creat(CS M){int m,n,t;;int k,j,e;JD *p,*q;printf("input row,col,非0个数:\n");scanf("%d %d %d",&m,&n,&t);M.mu=m;M.nu=n;M.tu=t;if(!(M.rhead=(J*)malloc((m+1)*sizeof(J)))||!(M.chead=(J*)malloc((n+1)*sizeof(J)))){printf("error init\n");exit(0); }printf("success init!\n");for(k=1;k<=m;k++){M.rhead[k]=NULL;}for(j=1;j<=n;j++){M.chead[j]=NULL;}for(scanf("%d%d%d",&k,&j,&e);0!=k;scanf("%d%d%d",&k,&j,&e)){if(!(p=(J)malloc(sizeof(JD)))){printf("error int element\n");exit(0);}p->row=k;p->col=j;p->val=e;if(NULL==M.rhead[k]||M.rhead[k]->col>j){//链接行 p->right=M.rhead[k];M.rhead[k]=p;}else{for(q=M.rhead[k];(q->right)&&q->right->col<j;q=q->right);p->right=q->right;q->right=p;}if(NULL==M.chead[j]||M.chead[j]->row>k){//链接列 p->down=M.chead[j];M.chead[j]=p;}else{for(q=M.chead[j];(q->down)&&q->down->row<k;q=q->down);p->down=q->down;q->down=p;}}return M;
}
void print(CS M){for(int i=1;i<=M.nu;i++){if(NULL!=M.chead[i]){J p=M.chead[i];while(NULL!=p){printf("%d %d %d\n",p->row,p->col,p->val);p=p->down;}}}
}
int main(){CS M;M.chead=NULL;M.rhead=NULL;M=creat(M);printf("print \n");print(M);
}