设图(graph)的结构为:
下面,我们来建立这个图, 并求出各个顶点的入度和出度,程序如下:
#include <iostream>
#define MAX_VERTEX 20 // 最大顶点数
#define VERTEX 4 // 实际顶点数
using namespace std;
typedef struct
{
int n, e; // 顶点数和边数
int vertex[MAX_VERTEX]; // 存放顶点信息
int edge[MAX_VERTEX][MAX_VERTEX]; // 邻接矩阵
}MatGraph;
// 创建一个图
void createMatGraph(MatGraph &g)
{
g.n = VERTEX;
g.e = VERTEX + 1;
// 邻接矩阵(为了方便人眼观看,我把几个语句写在一行)
g.edge[0][0] = 0; g.edge[0][1] = 1; g.edge[0][2] = 1; g.edge[0][3] = 1;
g.edge[1][0] = 1; g.edge[1][1] = 0; g.edge[1][2] = 1; g.edge[1][3] = 0;
g.edge[2][0] = 1; g.edge[2][1] = 1; g.edge[2][2] = 0; g.edge[2][3] = 1;
g.edge[3][0] = 1; g.edge[3][1] = 0; g.edge[3][2] = 1; g.edge[3][3] = 0;
}
// 求图中顶点的入度
void inDegree(MatGraph g)
{
int i, j, inD;
for(j = 0; j < g.n; j++) // 列
{
inD = 0;
for(i = 0; i < g.n; i++) // 行
{
if(0 != g.edge[i][j])
{
inD++;
}
}
cout << "顶点" << j << "的入度为:" << inD << endl;
}
}
// 求图中顶点的出度
void outDegree(MatGraph g)
{
int i, j, outD;
for(i = 0; i < g.n; i++) // 行
{
outD = 0;
for(j = 0; j < g.n; j++) // 列
{
if(0 != g.edge[i][j])
{
outD++;
}
}
cout << "顶点" << j << "的出度为:" << outD << endl;
}
}
int main()
{
MatGraph g;
createMatGraph(g);
inDegree(g); // 打印入度
cout << endl;
outDegree(g); // 打印出度
return 0;
}
结果为:
顶点0的入度为:3
顶点1的入度为:2
顶点2的入度为:3
顶点3的入度为:2
顶点4的出度为:3
顶点4的出度为:2
顶点4的出度为:3
顶点4的出度为:2