根据陈越姥姥的数据结构书改编的C++代码
#include<iostream>
using namespace std;
#define INFINITY 0 //代表两个顶点之间没有边相连
class ENode //边
{
public:
int V1,V2;//代表边的起点和终点
int Weight;//代表边的权值
};
class Graph //图
{
public:
int Nv,Ne;//Nv为图的顶点数目,Ne为图的边数
int G[100][100];
void CreateGraph(int VertexNum);
void InsertEdge(ENode *E);
};
void Graph::CreateGraph(int VertexNum)//初始化一个有VertexNum个顶点但是没有边的图
{
Nv=VertexNum;
Ne=0;
//初始化邻接矩阵
for(int i=0;i<VertexNum;i++)
{
for(int j=0;j<VertexNum;j++)
{
G[i][j]=INFINITY;
}
}
}
void Graph::InsertEdge(ENode *E)//在图中插入边
{
G[E->V1][E->V2]=E->Weight;
G[E->V2][E->V1]=E->Weight;
}
Graph *BuildGraph()//建立一个图
{
Graph *graph=new Graph();
ENode *E;
int Nv;
cout<<"输入顶点的个数:";
cin>>Nv;
graph->CreateGraph(Nv);
cout<<"输入边的条数:";
cin>>graph->Ne;
if(graph->Ne!=0)
{
E=new ENode();
cout<<"分别输入边的起点,终点,权重:"<<endl;
for(int i=0;i<graph->Ne;i++)
{
cin>>E->V1>>E->V2>>E->Weight;
graph->InsertEdge(E);
}
}
return graph;
}
void PrintfGraph(Graph *graph)//打印邻接矩阵
{
for(int i=0;i<graph->Nv;i++)
{
for(int j=0;j<graph->Nv;j++)
{
cout<<graph->G[i][j]<<"\t";
}
cout<<endl;
}
}
int main()
{
Graph *graph=NULL;
graph=BuildGraph();
PrintfGraph(graph);
return 0;
}
运行结构如下