ضرب دو ماتریس اسپارس با لیستهای پیوندی
کد:


کد:
#include <conio.h> #include <stdio.h> #include <iostream.h> #include <math.h> main () { int xx=10,yy=18,x,y,n,k,i,j,qq=0,q,list1[100][3],list2[100][3],list3[100][3],list4[100][3],a=0,b=0,h=0,c=0,jj=0,onsor=0; xx+=2; yy=16; gotoxy(yy,xx); cout<<"___________Matrix 1 ________"; xx+=2,yy=18; yy=18; gotoxy(yy,xx); cin >>x; list3[0][0]=x; yy+=8; gotoxy(yy,xx); cin >>y; list3[0][1]=y; yy+=8; gotoxy(yy,xx); cin >>i; xx++; //______________________________________________________________________________ for(n=0;n<=100;n++) { for(k=0;k<3;k++) { list1[n][k]=9; list2[n][k]=9; list3[n][k]=9; list4[n][k]=9; } } //____________________________input1__________________________________________________ cout<<" ............................"; yy=18;xx++; for(n=0;n<i;n++) { for(k=0;k<3;k++) { gotoxy(yy,xx); cin >> list1[n][k]; yy+=8; } yy=18; xx++; } //_____________________________input 2_________________________________________________ xx+=2,yy=18; cout<<" ___________Matris 2 ________"; gotoxy(yy,xx); cin >>x; list3[0][0]=x; yy+=8; gotoxy(yy,xx); cin >>y; list3[0][1]=y; yy+=8; gotoxy(yy,xx); cin >>j; //_____________________________________________________________________________________ xx++; cout<<" ............................"; xx++; yy=18; for(n=0;n<j;n++) { for(k=0;k<3;k++) { gotoxy(yy,xx); cin >> list2[n][k]; yy+=8; } yy=18; xx++; } //______________________________________________________________________________ h=0;q=0; for (n=0;n<i;n++) { for (k=0;k<j;k++) { if(list2[k][0]==list1[n][1]) { h++; list3[h-1][0]=list1[n][0] ; list3[h-1][1]=list2[k][1] ; list3[h-1][2]=list1[n][2]*list2[k][2]; } } } jj=h; //______________________________________________________________________________ h=0; for(n=0;n<jj;n++) { if (n==jj-1) break; if(list3[n][1]==list3[n+1][1] && list3[n][0]==list3[n+1][0]) { list4[h][0]=list3[n][0]+list3[n+1][0]; list4[h][1]=list3[n][1]+list3[n+1][1]; list4[h][2]=list3[n][2]+list3[n+1][2]; q=6;n++;qq++; } else { list4[h][0]=list3[n][0]; list4[h][1]=list3[n][1]; list4[h][2]=list3[n][2]; q=2; } h++; } if( q==2) { list4[h][0]=list3[n][0]; list4[h][1]=list3[n][1]; list4[h][2]=list3[n][2]; } if( q==0) { list4[h][0]=list3[n][0]; list4[h][1]=list3[n][1]; list4[h][2]=list3[n][2]; } //___________________________ Sort _____________________________________________ if(qq>0)jj=jj-qq; h=jj; for(n=0;n<h;n++) { if(h==n-1)break; if (list4[n][0]==list4[n+1][0]) { if(list4[n][1]>list4[n+1][1]) { a=0;b=0;c=0; a=list4[n][0]; b=list4[n][1]; c=list4[n][2]; list4[n][0]=list4[n+1][0]; list4[n][1]=list4[n+1][1]; list4[n][2]=list4[n+1][2]; list4[n+1][0]=a; list4[n+1][1]=b; list4[n+1][2]=c; } } } //_____________________________ Print __________________________________________ cout<<"\n\n\t\t "<<x<<"\t"<<y<<"\t"<<jj<<"\n"; cout<<"\t\t__________________\n\t\t "; for(n=0;n<jj;n++) { for(k=0;k<3;k++) { cout <<list4[n][k] <<"\t" ; } cout<<"\n"<<"\t\t "; } getch(); }