当前位置:   article > 正文

三元组基本算法_三元组推理算法

三元组推理算法

#include <iostream>

using namespace std;
struct TupNode{
    int row;//行号
    int col;//列号
    int d;//元素值
};
const int MAXR=20;//最大行数
const int MAXC=20;//最大列数
const int MaxSize=100;//三元组顺序表的最大元素个数
class SMatrix {
public:
SMatrix();//构造函数
~SMatrix();//析构函数
void CreateTSMatrix(const int A[][MAXC], int m, int n);//创建三元组
bool Setvalue(int i, int j, int x);//三元组元素赋值
bool Getvalue(int i, int j, int&x);//将指定位置的元素赋给变量
void DispMat();//输出
void Transpose(SMatrix&tb);//矩阵转置
private:
int rows, cols, nums;//分别表示行数,列数和非零元素个数
TupNode*data;//稀疏矩阵对应的三元组顺序表
};

//构造函数
SMatrix::SMatrix()
{
    data=new TupNode[MaxSize];
}
//析构函数
SMatrix::~SMatrix()
{
    delete[]data;
//输出
void SMatrix::DispMat()
{
    int i;
    if(nums<=0)
     return;
    cout<<"\t"<<rows<<"\t"<<cols <<"\t"<<nums <<endl;
    cout<<"\t \n";
    for(i=0;i<nums;i++)
    cout<<"\t"<< data[i]. row<<"\t"<< data[i]. col<<"\t"<< data[i]. d<< endl;
}
void SMatrix::CreateTSMatrix(const int A[][MAXC], int m, int n)
{
   int i,j;
   rows=m, cols=n, nums=0;
   for(i=0;i<m;i++)
     for(j=0;i<n;i++)
       if(A[i][j]!=0)//只存储非零元素
       {
           data[nums]. row=i;
           data[nums]. col=j;
           data[nums]. d=A[i][j];
           nums++;
        }
}
bool SMatrix::Setvalue(int i, int j, int x)
{
    int k =0,k1;
    if( i<0||i>=rows||j<0||j>=cols)
    {return false;}
    while(k<nums &&i>data[k]. row)//查找第i行的第1个非零元素k++;
    if(data[k]. row==i&&data[k]. col==j)//找到这样的元素data[k]. d= x;
    {
        data[k].d=x;
    }
    else {//当不存在这样的元素时插入一个元素
    for (k1=nums-1;k1>=k;k1--)
    {//后移元素以便插入
        data[k1+1]. row=data[k1]. row;
        data[k1+1]. col=data[k1]. col;
        data[k1+ 1]. d= data[k]. d;
    }
       data[k]. row=i;
       data[k]. col=j;
       data[k]. d =x;
       nums++;
}
return true;
}
//将指定位置的元素赋给变量
bool SMatrix::Getvalue(int i, int j, int&x)
{
    int k = 0;
    if(i<0||i>=rows||j<0||j>=cols)
    {return false;}
    while (k<nums &&data[k]. row<i)
    {
        k++;
    }
    if(data[k]. row==i&&data[k].col==j)
    {
        x=data[k].d;
    }
    else
    x =0;
    return true;
}
void SMatrıx::Transpose(SMatrıx&tb)
{
    int p,q =0,v;
    tb. rows=cols;
    tb. cols=rows;
    tb. nums =nums;
    if(nums!=0)
    {
        for(v=0;v<cols;v++)
          for(p=0;p<nums;p++)
            if(data[p]. col==v)
            {
               tb. data[q]. row=data[p]. co;
               tb. data[q]. col=data[p]. row;
               tb. data[q]. d= data[p]. d;
               q++;
            }
    }
}

int main()

{

    return 0;

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/900996
推荐阅读
相关标签
  

闽ICP备14008679号