سلام
الگوریتم ضرب دو ماتریس اسپارس با کمک لیست پیوندی چطوریه؟
ممنون
Printable View
سلام
الگوریتم ضرب دو ماتریس اسپارس با کمک لیست پیوندی چطوریه؟
ممنون
ببین این به کارتون میاد؟
[PHP]#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
int **arr,**bb,*t,*p;
int main()
{ clrscr();
int i,j,x,y,a=2,b=1,z=0,u=3;
cout<<"enter x:";
cin>>x;
cout<<"enter y:";
cin>>y;
p=(int *)malloc(sizeof(int)* x);
for(i=1;i<=x;i++)
arr[i]=(int *)malloc(y * sizeof(int));
for(i=1;i<=x;i++)
for(j=1;j<=y;j++)
{
cout<<"enter arr["<<i<<"]["<<j<<"]=";
cin>>arr[i][j];
}
for(i=1;i<=x;i++)
for(j=1;j<=y;j++)
if(arr[i][j]!=0 )z++;
t=(int *)malloc(u * sizeof(int));
for(i=1;i<x;i++)
bb[i]=(int *) malloc(z * sizeof(int));
bb[1][1]=x;
bb[1][2]=y;
bb[1][3]=z;
for(i=1;i<=x;i++)
for(j=1;j<=y;j++)
if(arr[i][j]!=0)
{
bb[a][b]=i;
b++;
bb[a][b]=j;
b++;
bb[a][b]=arr[i][j];
b=1;
a++;
}
for(i=1;i<=(z+1);i++)
for(j=1;j<=3;j++)
{
cout<<bb[i][j];
if (j==3)
cout<<endl;
}
getch();
return 0;
}[/PHP]
یا از این کدها ::
[PHP]#include<conio.h>
#include<stdio.h>
#include <stdlib.h>struct snod{
int row;
int col;
int data;
};
void spars(int a[][N],snod sm[]);
void sefr(snod *sm2);
void main ()
{
int i,j,l,k=1,k1,m,f;
snod sm[100],sm1[100],sm2[100];
clrscr();
sefr(sm2);
printf("enter struct1\n");
scanf("%d%d%d",&sm[0].row,&sm[0].col,&sm[0].data);
k=sm[0].data;
for(i=1;i<=k;i++)
scanf("%d%d%d",&sm[i].row,&sm[i].col,&sm[i].data); printf("enter struct2\n");
scanf("%d%d%d",&sm1[0].row,&sm1[0].col,&sm1[0].data);
k1=sm1[0].data;
for(i=1;i<=k1;i++)
scanf("%d%d%d",&sm1[i].row,&sm1[i].col,&sm1[i].data); if(sm[0].col!=sm1[0].row){
printf("this to matris can not mul");
getch();
exit(1);
}
sm2[0].row=sm[0].row;
sm2[0].col=sm1[0].col;
sm2[0].data=0;
l=1;
for(i=1;i<=k;i++)
for(j=1;j<=k1;j++){
if(sm[i].col==sm1[j].row){
f=0;
sm2[l].row=sm[i].row;
sm2[l].col=sm1[j].col;
for(m=1;m<l;m++)
if(sm2[l].row==sm2[m].row && sm2[l].col==sm2[m].col){
sm2[m].data+=sm[i].data*sm1[j].data;
if(sm2[m].data==0){
while(sm2[m+1].data){
sm2[m]=sm2[m+1];
m++;
}
l--;
}
f=1;
}
if(f==0)
{
sm2[l].data=sm[i].data*sm1[j].data;
sm2[0].data++;
l++;
}
}
}
printf("watch struct2\n");
getch();
for(i=0;i<l;i++)
printf("%-5d%-5d%-5d\n",sm2[i].row,sm2[i].col,sm2[i].data); getch();
}
//*******************
void sefr(snod *sm2)
{
int i;
for(i=0;i<100;i++){
sm2[i].row=0;sm2[i].col=0;sm2[i].data=0;}
}[/PHP]
سلام
من فقط الگوریتمش رو می خواستم نه کد
بازم ممنون
حلش کردم - میخواستم بدونم از الگوریتمی که پیاده سازی کردم بهینه تر هم وجود داره یا نه
میشه همین کد رو با سی شارپ هم بنویسید
ممنون
البته با لیست پیوندی حلقوی
این که با ارایه بود:n03: