#include<iostream>
using namespace std;
#define MaxSize 10
class graph
{
private:
int VertexNum;//点的个数
int EdgeNum;//边得个数
char data[MaxSize];//用一维数组来存各图顶点的数据,如果数据多的话可以改为结构体
int a[MaxSize][MaxSize];//二维数组存顶点与顶点之间的关系
public:
graph()//初始化图
{
VertexNum = 0;
EdgeNum = 0;
for (int i = 0; i < MaxSize; ++i)
{
for(int j=0;j<MaxSize;++j)
a[i][j] = 0;
}
}
void CreateGraph(char b[],int n)//创建图的关系
{
for (int i = 1; i < 1+n; ++i)
{
data[i] = b[i];
}
VertexNum = n;
cout << "输入各店间点的邻接关系" << endl;
int vi,vj;
for (int i = 1; i < n+1; ++i)
{
cin >> vi >> vj;
a[vi][vj] = 1;
a[vj][vi] = 1;
}
}
void OutCome()
{
cout << "该图的邻接矩阵为" << endl;
cout << '\t';
for (int i = 1; i < VertexNum+1; ++i)
{
cout << data[i] << '\t';
}
cout << endl;
for (int i = 1; i < VertexNum+1; ++i)
{
cout << data[i] << '\t';
for (int j = 1; j < VertexNum+1; ++j)
cout << a[i][j] << '\t';
cout << endl;
}
for (int i = 1; i < VertexNum+1; ++i)
for (int j = 1; j < VertexNum+1; ++j)
EdgeNum += a[i][j];
cout << "该无向图中边的个数为" <<EdgeNum/2<< endl;
}
};
int main()
{
int n;
cout << "顶点个数为" << endl;
cin >> n;
graph g;
char a[MaxSize];
cout << "输入各节点元素" << endl;
for (int i = 1; i < n+1; ++i)
cin>>a[i];
g.CreateGraph(a, n);
g.OutCome();
}
C/C++简单实现无向图的邻接矩阵
最新推荐文章于 2021-10-29 22:45:25 发布