#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode
{
int row;
int col;
int value;
struct ListNode *link;
} ListNode;
typedef struct ListHeader
{
int length;
ListNode *head;
ListNode *tail;
} ListHeader;
void init (ListHeader *plist)
{
plist -> length = 0;
plist -> head = NULL;
plist -> tail = NULL;
}
void insert_node_last(ListHeader *plist, int row, int col, int value)
{
ListNode *temp = (ListNode *)malloc(sizeof(ListNode));
if(temp==NULL) fprintf(stderr,"¸Þ¸ð¸® ÇÒ´ç ¿¡·¯\n");
temp->row=row;
temp->col=col;
temp->value=value;
temp->link = NULL;
if(plist->tail=NULL)
{
plist->head=plist->tail=temp;
}
else
{
plist->tail->link = temp;
plist->tail=temp;
}
plist->length++;
}
void sparse_matrix_add2(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3, int n2)
{
ListNode *a = plist1->head;
ListNode *b = plist2->head;
int sum;
while(a->link!=NULL && b->link!=NULL)
{
int inda = (a->row)*n2 + a->col;
int indb = (b->row)*n2 + b->col;
if(inda<indb)
{
insert_node_last(plist3,a->row,a->col,a->value);
a=a->link;
}
else if(inda == indb)
{
sum = a->value + b->value;
if(sum!=0)
{
insert_node_last(plist3,a->row,a->col,sum);
a=a->link, b=b->link;
}
else a=a->link,b=b->link;
}
else if(inda>indb)
{
insert_node_last(plist3,b->row,b->col,b->value);
b=b->link;
}}
for(;a!=NULL;a=a->link)
insert_node_last(plist3,a->row,a->col,a->value);
for(;b!=NULL;b=b->link)
insert_node_last(plist3,b->row,b->col,b->value);
}
void sparse_matrix_print(ListHeader *plist)
{
ListNode *p=plist->head;
for(;p;p=p->link)
printf(" %d %d %d\n",p->row,p->col,p->value);
}
void main()
{
ListHeader list1,list2,list3;
int row=0,col=0,value=0;
int n1=0,n2=0,n3=0;
int m1=0,m2=0,m3=0;
int s=0;
FILE *fp=NULL, *fs=NULL;
init(&list1);
init(&list2);
init(&list3);
fp=fopen("input.txt","rt");
if(fp==NULL)
{
printf("input.txt ÆÄÀÏ¿ÀǺҰ¡ \n");
fclose(fp);
return;
}
else
{
fscanf(fp,"%d %d %d",&n1,&n2,&n3);
while(1)
{
if(fscanf(fp,"%d %d %d", &row,&col,&value) != (n1,n2,value))
insert_node_last(&list1, row, col, value);
else
{
m1=row, m2=col;
break;
}
}
//fscanf(fp,"%d %d %d",&m1,&m2,&m3);
//if(m1==n1 && m2==n2)
//break;
while(1)
{
if(fscanf(fp,"%d %d %d", &row, &col, &value)!=EOF)
insert_node_last(&list2,row,col,value);
else break;
}
sparse_matrix_print(&list1);
sparse_matrix_print(&list2);
}}
¾È³çÇϼ¼¿ä
C¾ð¾î·Î row¶û columnÀ̶û value·Î ±¸¼ºµÈ Sparse Matrix¸¦ Linked List·Î ±¸ÇöÇؼ µ¡¼À¿¬»êÇÏ´Â ÇÁ·Î±×·¥À» Â¥°í Àִµ¥¿ä.
»õ·Î¿î node Ãß°¡ÇÏ´Â ÇÔ¼ö¶û µ¡¼À¿¬»êÇÏ´Â ÇÔ¼ö¸¦ Á¤ÀÇÇÏ°í ¾Æ·¡¿Í °°Àº ³»¿ëÀÇ input.txt¿¡¼ µÎ sparse matrix¸¦ ¹Þ¾Æ¼ µ¡¼À¿¬»ê Çؼ output.txt¿¡ Ãâ·ÂÇÏ°Ô ÇÏ·Á´Â ÇÁ·Î±×·¥Àä
±× Áß¿¡¼ input.txt¿¡¼ fscanf·Î °ªÀ» ¹Þ¾Æ ¿£ÅÍ ±âÁØ ÀºÎºÐÀº list1¿¡ ³ëµå¸¦ °è¼Ó Ãß°¡ÇÏ°í ¾Æ·§ºÎºÐÀº list2¿¡ Ãß°¡ÇÏ´Â ¼Ò½º¸¸ ¿Ã·ÁºÃ½À´Ï´Ù.
±×¸®°í ¼Ò½º ¸Ç ¹Ø ºÎºÐ sparse_matrix_print(&list1)À̶û 2´Â ¸Þ¸ðÀå¿¡¼ Àß ºÒ·¯¿Í¼ Àß ÀúÀåÇß´ÂÁö È®ÀÎÇÏ´Â ÇÔ¼ö°í¿ä.
ÄÄÆÄÀÏÀº µÇ´Âµ¥ µð¹ö±×Çϴϱî ÀÚ²Ù ÀÌ·± ¿À·ù°¡ ¶ß³×¿ä
main.c.exeÀÇ 0x00c01504¿¡ 󸮵ÇÁö ¾ÊÀº ¿¹¿Ü°¡ ÀÖ½À´Ï´Ù. 0xC0000005: 0x0000000c À§Ä¡¸¦ ±â·ÏÇÏ´Â µ¿¾È ¾×¼¼½º À§¹ÝÀÌ ¹ß»ýÇß½À´Ï´Ù.
±×¸®°í ¾Æ·¡ÂÊ Áö¿ª(?)À» º¸´Ï pllistÀÇ headÀÇ row¶û colÀ̶û value, link¿¡
CXX0030 ¿À·ù : ½ÄÀ» °è»êÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ·± °Íµµ º¸ÀÌ°í¿ä.
¾Æ ÁøÂ¥ µ¹°Ú³×¿ä ¹¹°¡ Ʋ·È´ÂÁö °¨ÀÌ ¾ÈÀâÈ÷´Ï±î ¹» ¾î¶»°Ô ¹æÇâÀ» Àâ¾Æ¾ß ÇÒ Áö ¸ð¸£°Ú½À´Ï´Ù. »ì·ÁÁÖ¼¼¿ä
input.txt
2 3 3
0 0 2
0 2 1
1 2 3
2 3 4
0 0 1
0 1 1
0 2 2
1 1 2
output.txt
Addition
2 3 5
0 0 3
0 1 1
0 2 3
1 1 2
1 2 3
|