注册 登录
编程论坛 数据结构与算法

请各位帮帮忙,看一下这个是什么意思

小王子的花 发布于 2013-05-06 20:46, 651 次点击
#include <iostream>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
using namespace std;
typedef int ElemType;
typedef struct{
    int i,j;     //矩阵的行下标及列下标
    ElemType e;
}Triple;
typedef struct{
    Triple data[MAXSIZE+1];    //三元组表
    int mu,nu,tu;      //矩阵的行数列数及非零元个数
}TSMatrix;



int CreateSMatrix(TSMatrix &M)      //创建矩阵
{
    cout<<"请输入稀疏矩阵的行数、列数和非零元个数:"<<endl;
    cin>>M.mu>>M.nu>>M.tu;
    if((M.mu<=0)||(M.nu<=0)||(M.tu<=0)||(M.tu>M.mu*M.nu))             //判断行值、列值、元素个数是否合法  
    return ERROR;
    for(int i=1;i<=M.tu;i++)
    {
        cout<<"请输入元素坐标及数值:"<<endl;
        cin>>M.data[i].i>>M.data[i].j>>M.data[i].e;
        if((M.data[i].i<=0)||(M.data[i].j<=0))           //控制行、列符合要求
        {
            cout<<"输入错误,请重新输入"<<endl;
            cin>>M.data[i].i>>M.data[i].j>>M.data[i].e;
        }
    }
return OK;
}




int DisplaySMatrix(TSMatrix &M)      //输出矩阵
{
    int n=0;
    for(int i=1;i<=M.mu;i++)
    {
        for(int j=1;j<=M.nu;j++)
        {
            if(M.data[n].i==i&&M.data[n].j==j)
            {
                cout<<M.data[n].e<<" ";
                n++;
            }
            else
            {
                cout<<"0"<<" ";
            }
        }
        cout<<endl;
    }
    cout<<endl;
    return OK;
}











 int AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q)//矩阵相加
{
    int i=0,j=0,k=0;
    while(i<M.tu&&j<N.tu)
    {
        switch(CompareTriple( M.data[i], N.data[j]))//这个CompareTriple实现的是什么功能啊        {
            case -1:Q.data[k++]=M.data[i++];
                break;
            case 1:Q.data[k++]=N.data[j++];
                break;
            default:Q.data[k]=M.data[i];
            Q.data[k].e+=N.data[j].e;
            if(Q.data[k].e!=0)
                k++;
            i++;
            j++;
            break;
        }
    }
    while(i<M.tu) Q.data[k++]=M.data[i++];
    while(j<N.tu) Q.data[k++]=N.data[j++];
    Q.tu=k;
    return OK;
}








int main()
{
    TSMatrix M,N,T,Q;
    CreateSMatrix(M);
    cout<<"矩阵M:"<<endl;
    DisplaySMatrix(M);
    CreateSMatrix(N);
    cout<<"矩阵N:"<<endl;
    DisplaySMatrix(N);
    AddSMatrix(M,N,Q);
    cout<<"矩阵M+N:"<<endl;
    DisplaySMatrix(Q);
    return OK;
}







            
            
        
        
        
3 回复
#2
小王子的花2013-05-07 08:34
就是想知道我这个CompareTriple函数应该怎么写,请各位一定帮帮忙,谢啦谢啦
        switch(CompareTriple( M.data[i], N.data[j]))//这个CompareTriple实现的是什么功能啊        {
            case -1:Q.data[k++]=M.data[i++];
                break;
            case 1:Q.data[k++]=N.data[j++];
                break;
            default:Q.data[k]=M.data[i];
            Q.data[k].e+=N.data[j].e;
            if(Q.data[k].e!=0)
                k++;
            i++;
            j++;
            break;
#3
azzbcc2013-05-07 14:48
应该是这个
程序代码:
int CompareTriple(Triple a, Triple b)
{
    if (a.e && b.e) return  0;
    if (a.e)        return -1;
    else            return  1;
}
#4
小王子的花2013-05-07 16:07
回复 3楼 azzbcc
谢谢!!!
1