在 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

相关文章