Graph.h文件
#pragma once
#define MaxVnum 100
typedef char VexType;
typedef double EdgeType;
class Graph
{
public:
int locatevex(Graph G, VexType x);
void CreatGraph(Graph &G);
void printGraph(Graph G);
private:
VexType Vex[MaxVnum];
EdgeType Edge[MaxVnum][MaxVnum];
int vexnum, edgenum;//顶点个数及边的个数
};
Graph.cpp文件
#include <iostream>
#include "graph.h"
using namespace std;
int Graph::locatevex(Graph G, VexType x){
for (int i = 0; i <G.vexnum; i++)
if (x == G.Vex[i]) return i;
return -1;
}
void Graph::CreatGraph(Graph &G){
int i, j;
VexType u, v;
cout << "请输入边数" << endl;
cin >> G.vexnum;
cout << "请输入节点数" << endl;
cin >> G.edgenum;
cout << "请输入顶点信息:" << endl;
for (int i = 0; i < G.vexnum; i++) cin >> G.Vex[i];
//邻接矩阵初始化
for (int i = 0; i < G.vexnum; i++)
for (int j = 0; j < G.vexnum; j++)
G.Edge[i][j] = 0;
cout << "请输入每两条边依附的两个顶点" << endl;
while (G.edgenum--)
{
cin >> u >> v;
i = locatevex(G, u);//查找u的下标
j = locatevex(G,v);//查找v的小标
if (i!=-1&&j!=-1)
G.Edge[i][j] = G.Edge[j][i] = 1;
else{
cout << "输入顶点信息错误" << endl;
G.edgenum++;//本次输入不算
}
}
}
void Graph::printGraph(Graph G){
cout << "图的邻接矩阵为" << endl;
for (int i = 0; i < G.vexnum;i++)
{
for (int j = 0; j < G.vexnum; j++)
cout << G.Edge[i][i] << "\t";
cout << endl;
}
}
main.cpp文件
#include "graph.h"
#include <iostream>
using namespace std;
int main()
{
Graph G;
int i;
G.CreatGraph(G);
G.printGraph(G);
cin >> i;
return 0;
}