#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
using namespace std;
#define MAXSIZE 400 //非零元最多个数
#define MAXRC 20 //最多行.列数
#define ElemType int //矩阵中元素类型
typedef struct {
int i,j; //行下标,列下标
ElemType e; //元素值
}Triple;
typedef struct {
Triple data[MAXSIZE+1]; //非零元三元组表
int rpos[MAXRC]; //各行第一个非零元的位置表
int mu,nu,tu; //矩阵的行数,列数,非零元个数
}RLSMatrix;
int CreateTriple(RLSMatrix &T);
void ElemCopy(Triple A,Triple &B);
int AddTriple(RLSMatrix M,RLSMatrix N,RLSMatrix &Q);
int SubTriple(RLSMatrix M,RLSMatrix N,RLSMatrix &Q);
int MultTriple(RLSMatrix M,RLSMatrix N,RLSMatrix &Q);
int PrintTriple(RLSMatrix T);
int CreateTriple(RLSMatrix &T)
{
//创建一个矩阵(从文件中读取)
int M_count,flag,n;
char path[100];//输入路径字符最多个数100
flag=1; //
cout<<"请输入矩阵文件路径:"<<endl;
cin>>path;
ifstream inFile(path);
if(!inFile) { cout<<"您输入的文件不存在! "; exit (0); }//判断能否打开文件,给出相应的提示
cout<<" ----------------------------\n";
cout<<"读取的矩阵为:\n";
inFile>>T.mu>>T.nu>>T.tu;//从文件中读取行数.列数.非零元个数
for(n=1;n<=T.tu;n++)
{
inFile>>T.data[n].i>>T.data[n].j>>T.data[n].e;//读取每一个非零元存入data数组
}
for(M_count=1;M_count<=T.mu;M_count++)//逐行扫描
{
for( n=1;n<=T.tu && flag;n++)
{
if(T.data[n].i==M_count)//找到那行第一个非零元
{
T.rpos[M_count]=n;//置这个元素在T.data中的序号
break;
}//if
if(n>T.tu) flag=0;//当前行全部扫描完毕
}//for
if(n>T.tu) T.rpos[M_count]=T.tu;//非零元全部扫描结束
}
if(M_count==T.mu+1&&n==T.tu+1) T.rpos[M_count-1]=T.tu+1;//给最后没有非零元素的几行赋值
inFile.close();//文件读取完毕后关闭文件
return 1;