#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);
}