标题:三元组 稀疏矩阵 找错
只看楼主
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
 问题点数:0 回复次数:1 
三元组 稀疏矩阵 找错
以下是一个用三元数表示稀疏矩阵,并用三元组对二个稀疏矩阵进行相加的程序,用三元组存储和输出都有问题,顺便看下相加的程序是否有问题。。。谢谢大侠们!
程序代码:
#include<iostream>
using namespace std;
#define   MaxSize   100   //用户自定义
#define M 100
#define N 100
typedef   int   ElemType;   //用户自定义
typedef   struct
{
    //定义三元组
    int i;
    int j;
    ElemType value;
} TripleNode;

typedef   struct
{
    //定义三元组表
    int m;
    int n;
    int t;
    TripleNode data[MaxSize]; //矩阵行,列及三元组表长度
} Tripletable;

//输入矩阵三元组并且存储
void CreatMat(Tripletable *temp,ElemType A[M][N])
{
    int i, j,r,c;
    cout<<"Please enter the value of Row and Col"<<endl;
    cin>>r>>c;
    temp->m=r;
    temp->n=c;
    temp->t=0;
    for(i=0;i<r;i++)
    {
        for (j=0;j<c;j++)
        {
            cin>>A[i][j];
            if (A[i][j] != 0 )    /*只存储非零元素*/
            {
                temp->data[temp->t].i=i;
                temp->data[temp->t].j=j;
                temp->data[temp->t].value=A[i][j];
                temp->t++;
            }
        }
    }
}

//矩阵相加算法
void AddTriTuple(Tripletable *A,Tripletable *B,Tripletable *C)
{
    //三元组表表示的稀疏矩阵A,B相加
    int   k,l;
    ElemType   temp;
    C->m=A->m;//矩阵行数
    C->n=A->n;//矩阵列数
    C->t=0;   //三元组表长度
    k=0;
    l=0;
    while(k<A->t&&l<B->t)
    {
        if((A->data[k].i==B->data[l].i)&&(A->data[k].j==B->data[l].j))
        {
            temp=A->data[k].value+B->data[l].value;
            if(!temp)//相加不为零,加入C
            {
                C->data[C->t].i=A->data[k].i;
                C->data[C->t].j=A->data[k].j;
                C->data[C->t++].value=temp;
            }
            k++;
            l++;
        }
        if (((A->data[k].i==B->data[l].i)&&(A->data[k].j<B->data[l].j))
            || (A->data[k].i<B->data[l].i))//将A中三元组加入C
        {
            C->data[C->t].i=A->data[k].i;
            C->data[C->t].j=A->data[k].j;
            C->data[C->t++].value=A->data[k].value;
            k++;
        }
        if( ((A->data[k].i==B->data[l].i)&&(A->data[k].j>B->data[l].j))
        ||(A->data[k].i>B->data[l].i))//将B中三元组加入C
        {
            C->data[C->t].i=B->data[l].i;
            C->data[C->t].j=B->data[l].j;
            C->data[C->t++].value=B->data[l].value;
            l++;
        }
    }
    while   (k<A->t)//将A中剩余三元组加入C
    {
        C->data[C->t].i=A->data[k].i;
        C->data[C->t].j=A->data[k].j;
        C->data[C->t++].value=A->data[k].value;
        k++;
    }
    while(l<B->t)//将B中剩余三元组加入C
    {
        C->data[C->t].i=B->data[l].i;
        C->data[C->t].j=B->data[l].j;
        C->data[C->t++].value=B->data[l].value;
        l++;
    }
}
void ouputTripleTable(Tripletable *C)
{
    int i,j;
    int k=0;
    for(i=0;i<C->m;i++)
    {
        for(j=0;j<C->n;j++)
        {
            if(i==C->data[k].i && j==C->data[k].j)
                cout<<C->data[k++].value;
            else
                cout<<"0";
            if(j<C->n-1)
                cout<<" ";
            else
                cout<<endl;
        }
    }
}
int main()
{
    int a[M][N];
    int b[M][N];
    Tripletable *A,*B,*C;
    CreatMat(A,a);
    CreatMat(B,b);
    AddTriTuple(A,B,C);
    ouputTripleTable(C);
}
输入第二个三元组数据这里有点问题

[ 本帖最后由 liucs116 于 2010-11-27 15:20 编辑 ]
搜索更多相关主题的帖子: color 三元 
2010-11-26 16:12
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
得分:0 
谁帮忙看下啊。。。都一天了

学无止境!
2010-11-27 15:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-326977-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032851 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved