#include <iostream>
using namespace std;
#define MAX 100
#define ERROR 0
#define OK 1
typedef int Status;
typedef struct
{
int row,col;
int item;
}Triple;
class TripleMatrix
{
private:
Triple data[MAX];
int mu,nu,num;
public:
TripleMatrix();
TripleMatrix(int m,int n);
~TripleMatrix();
Status setItem(int row,int col,int item);
int getItem(int row,int col);
void printMatrix();
void printTriple();
};
TripleMatrix::TripleMatrix()
{
mu=0;
nu=0;
num=0;
}
TripleMatrix::TripleMatrix(int m,int n)
{
mu=m;
nu=n;
num=0;
}
TripleMatrix::~TripleMatrix()
{
}
int TripleMatrix::getItem(int row,int col)
{
int i;
if(row>mu||col>nu)
return 0;
for(i=0;i<num;i++)
{
if(data[i].row==row&&data[i].col)
{
return data[i].item;
}
}
return 0;
}
Status TripleMatrix::setItem(int row,int col,int item)
{
if(row>mu||col>nu)
return ERROR;
if(num==MAX)
return ERROR;
if(item==0)
return OK;
int index=0;
while(index<num)
{
if(row>data[index].row)
index++;
else if(row==data[index].row&&col>data[index].col)
index++;
else
break;
}
int i;
if(row==data[index].row&&(col=data[index].col))
{
data[index].item=item;
}
else
{
for(i=num;i>index;i++)
{
data[i]=data[i-1];
}
data[index].row=row;
data[index].col=col;
data[index].item=item;
num++;
}
}
void TripleMatrix::printMatrix()
{
int tripleindex=0,i,j;
cout<<"打印矩阵"<<endl;
for(i=1;i<=mu;i++)
{
for(j=1;j<=nu;j++)
{
if(i==data[tripleindex].row&&j==data[tripleindex].col)
{
cout<<data[tripleindex].item<<"\t";
tripleindex++;
}
else
cout<<"0\t";
}
cout<<endl;
}
cout<<mu<<"行"<<nu<<"列"<<num<<"个非零元素"<<endl;
}
void TripleMatrix::printTriple()
{
int i;
cout<<"打印三元数组"<<endl;
cout<<"row\tcot\titem"<<endl;
for(i=0;i<num;i++)
{
cout<<data[i].row<<"\t"<<data[i].col<<"\t"<<data[i].item<<endl;
}
}
void inputMatrix(int m,int n,int num,TripleMatrix& triple)
{
int i,row,col,item;
cout<<"请依次输入行,列和非零元:"<<endl;
for(i=1;i<=num;i++)
{
cin>>row>>col>>item;
if(item!=0)
{
if(triple.setItem(row,col,item)==ERROR)
{
cout<<"输入有误";
break;
}
}
}
}
int main()
{
int m,n,num;
cout<<"请输入矩阵的行,列和非零元素个数:"<<endl;
cin>>m>>n>>num;
TripleMatrix triple(m,n);
inputMatrix(m,n,num,triple);
triple.printTriple();
triple.printMatrix();
return 0;
}
1.选取校园的十个标志性的地点作为本次介绍的对象,通过读取文本文件来提取出景点名称和两两之间的距离。
2.介绍景点的特征。
3.创建邻接矩阵实现两点之间距离的记录。
4.通过弗洛伊德算法求最短路径。