| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 485 人关注过本帖
标题:三元组 稀疏矩阵 找错
只看楼主 加入收藏
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
收藏
 问题点数:0 回复次数:0 
三元组 稀疏矩阵 找错
以下是一个用三元数表示稀疏矩阵,并用三元组对二个稀疏矩阵进行相加的程序,输入出现了问题,顺便看下相加的程序是否有问题。。。谢谢大侠们!
程序代码:
#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 r,int c)
{
    int i, j;
    temp->m=r;
    temp->n=c;
    temp->t=0;
    for(i=0;i<r;i++)
    {
        for (j=0;j<c;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;
        }
    }
}
void inputArray(ElemType A[M][N],int r,int c)
{
    int i,j;
    cout<<"Please enter the value of ROW and COL"<<endl;
    cin>>r>>c;
    for(i=0;i<r;i++)
        for(j=0;j<c;j++)
            cin>>A[i][j];
}
int main()
{
    ElemType a[M][N];
    ElemType b[M][N];
    int Ra,Rb,Ca,Cb;
    Tripletable *A,*B,*C;
    inputArray(a,Ra,Ca);
    CreatMat(A,a,Ra,Ca);
    inputArray(b,Rb,Cb);
    CreatMat(B,b,Rb,Cb);
    AddTriTuple(A,B,C);
    ouputTripleTable(A);
}

输入的时候就出现问题了,谁帮忙看看
搜索更多相关主题的帖子: 三元 矩阵 
2010-11-27 15:44
快速回复:三元组 稀疏矩阵 找错
数据加载中...
 
   



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

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