【问题标题】:Last element during multiplication of sparse matrice not printing?稀疏矩阵乘法过程中的最后一个元素不打印?
【发布时间】:2018-08-09 18:26:02
【问题描述】:

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

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

虽然所有元素都正确打印,但最后一个元素会产生垃圾值。我试图空运行它,但结果相同。谁能告诉我原因和解决方案? 编辑:我添加了

【问题讨论】:

  • 快速查看您的代码似乎引用了 smatrix1[tempa],其中 tempa 可以为 4。这超出了数组的范围,因此所有行为都是未定义的。
  • 是的,最初它是

标签: c algorithm data-structures


【解决方案1】:

编辑:这是你的问题。此行不应递增 j:

变化:

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

收件人:

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

另外,'

【讨论】:

  • 但不应该这样。因为当 i=2 和 j=2 时,如果 smatrix1[tempa][1] 等于 smatrix2[tempb][1],即 {2,1,1} 和 {2,1,5}。所以输出应该 2 2 5 代替程序中显示的 0
  • 我看过你的实现,它似乎是这个的派生:coding-c.blogspot.com/2010/12/… 不同之处似乎在于打印时 for(int i=0;i
  • 我按照你的要求做了。它所做的是它只是省略了最后一个值,即 2 2 5
  • 非常感谢您的时间和精力,先生
猜你喜欢
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2011-11-20
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多