图的表示——C++建立图的邻接矩阵
作者:互联网
用C++与关系矩阵表示图模型
#include <iostream>
#include <ctime>
#include <string>
#include <vector>
using namespace std;
#define LL long long
const int MAX_SCALE=10;
class picM{
vector<vector<int>> nearMatrix;
vector<int> OD,ID;
int size;
public:
picM(){
size=0;
for(int i=0;i<MAX_SCALE;i++){
vector<int> v(MAX_SCALE,0);
nearMatrix.push_back(v);
}
}
void resize(int n){
size=n;
for(int i=0;i<n;i++){
vector<int> v(n,0);
nearMatrix.push_back(v);
}
}
void add(int a,int b,int c){
if(a>size) size=a;
if(b>size) size=b;
nearMatrix[a-1][b-1]=c;
}
void printMatrix(){
cout<<"邻接矩阵如下:"<<endl;
for(int i=0;i<size+1;i++){
if(i==0){
for(int j=0;j<size+1;j++){
if(j==0){
cout<<" ";
}else{
cout<<" ";
cout<<j;
if(j<10) cout<<" ";
}
}
}else{
for(int j=0;j<size+1;j++){
if(j==0){
cout<<i;
if(i<10) cout<<" ";
}else{
cout<<" ";
cout<<nearMatrix[i-1][j-1];
if(nearMatrix[i-1][j-1]<10) cout<<" ";
}
}
}
cout<<endl;
}
}
void calNum(){ //计算度数并输出,默认为无向权重图
cout<<"结点出度如下:"<<endl;
OD.resize(size);
ID.resize(size);
for(int i=0;i<size;i++){
OD[i]=0;
ID[i]=0;
for(int j=0;j<size;j++){
OD[i]+=nearMatrix[i][j];
ID[i]+=nearMatrix[j][i];
}
cout<<"结点"<<i+1<<"的出度为:"<<OD[i]<<",入度为:"<<ID[i]<<endl;
}
return ;
}
};
int main(){
picM p;
int n,a,b,c,m;
cout<<"请输入顶点的个数:";
cin>>m;
p.resize(m);
cout<<"请输入边的数量:";
cin>>n;
for(int i=0;i<n;i++){
cin>>a>>b>>c;
p.add(a,b,c);
}
p.printMatrix();
p.calNum();
return 0;
}
很简单的ADT编写与功能实现,默认为有向权重图,注意出度与入度的区分即可,整体逻辑清晰也很简单;值得注意的是矩阵的输出格式化,考虑到两位数字,必须设置好输出的格式(占位两格不足补齐,间隔都为一格),才能使关系矩阵被有序的输出。若是无向矩阵,添加边信息时双向的矩阵内容都要填补。
标签:include,建立,int,void,矩阵,C++,邻接矩阵,size,nearMatrix 来源: https://www.cnblogs.com/Forest-set-you/p/16307918.html