稀疏矩阵乘法运算期间的最后一个元素不打印?

时间:2018-08-09 18:26:02

标签: c algorithm data-structures

我刚刚开始数据结构,并且我正在通过三元组表示来练习稀疏矩阵的乘法。我的代码是:

#include<stdio.h>
#include<stdlib.h>
void main(){
  int smatrix1[4][3]={{1,2,10},{1,3,12},{2,1,1},{2,3,2}};
  int smatrix2[4][3]={{1,1,2},{1,3,8},{2,1,5},{2,2,1}};
  int i,j,x=0;
  int smatrix3[4][4];
  for(int i=0;i<4;){
    int r=smatrix1[i][0];
    for(int j=0;j<4;j++){
      int c=smatrix2[j][0];
      int tempa=i,tempb=j;
      int sum=0;
      while(tempa<=4 && smatrix1[tempa][0]==r && tempb<=4 && smatrix2[tempb][0]==c){
        if(smatrix1[tempa][1]<smatrix2[tempb][1])
          tempa++;
        else if(smatrix1[tempa][1]>smatrix2[tempb][1])
          tempb++;
        else if(smatrix1[tempa][1]==smatrix2[tempb][1])
          sum+=smatrix1[tempa++][2]*smatrix2[tempb++][2];
        printf("%d\n",sum);
      }
      printf("R C SUM %d%d%d\n",r,c,sum);
      if(sum!=0){
        smatrix3[x][0]=r;
        smatrix3[x][1]=c;
        smatrix3[x][2]=sum;
        x++;
      }
      while(j<=4 && smatrix2[j][0]==c)
        j++;
    }
    while(i<=4 && smatrix1[i][0]==r)
      i++;
  }
  for(int i=0;i<4;i++){
    printf("%d\t%d\t%d\n",smatrix3[i][0],smatrix3[i][1],smatrix3[i][2]);
  }
}

虽然所有元素都可以正确打印,但是最后一个元素会导致垃圾值。我尝试空运行它,但结果相同。谁能告诉我原因以及解决方法? 编辑:我添加了<= 4而不是<4,以防最后一个元素由于postscript ++运算符而被忽略。添加或删除=符号完全无效。

1 个答案:

答案 0 :(得分:4)

编辑:这是您的问题。该行不应递增j:

更改:

for(int j=0;j<4;j++){

收件人:

for(int j=0;j<4;){

另外,对<= 4'的所有比较都应为'<4'