在 C++ 中根据所有顶点的给定度数构造一个图
c++server side programmingprogramming更新于 2024/10/2 21:36:00
假设我们有一个顶点列表,并且给定了它们的度数。我们必须根据该度数序列生成一个无向图。它不会包含循环或多个边。因此,如果度数序列为 [2, 2, 1, 1],则图可以像这样
为了解决这个问题,我们将遵循以下步骤 −
定义邻接矩阵 adj 来存储图
对于每个顶点 i,执行
对于每个有效的顶点 j,并且位于 i 旁边
如果顶点 i 和 j 的度大于零,则连接它们
显示矩阵。
示例
#include <iostream> #include <iomanip> using namespace std; void generateGraph(int vert_degree[], int n) { int adj_mat[n][n]; for(int i = 0; i<n; i++){ for(int j = 0; j < n; j++){ adj_mat[i][j] = 0; } } for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (vert_degree[i] > 0 && vert_degree[j] > 0) { vert_degree[i]--; vert_degree[j]--; adj_mat[i][j] = adj_mat[j][i] = 1; } } } cout << endl << setw(3) << " "; for (int i = 0; i < n; i++) cout << setw(3) << "(" << i << ")"; cout << endl << endl; for (int i = 0; i < n; i++) { cout << setw(4) << "(" << i << ")"; for (int j = 0; j < n; j++) cout << setw(5) << adj_mat[i][j]; cout << endl; } } int main() { int vert_degree[] = { 2, 2, 1, 1, 1 }; int n = sizeof(vert_degree) / sizeof(vert_degree[0]); generateGraph(vert_degree, n); }
输出
(0) (1) (2) (3) (4) (0) 0 1 1 0 0 (1) 1 0 0 1 0 (2) 1 0 0 0 0 (3) 0 1 0 0 0 (4) 0 0 0 0 0