C++ 统计邻居节点和最大为K的图中节点数量

C++ 统计邻居节点和最大为K的图中节点数量

介绍

无向图是计算机科学和图论的基本组成部分,表示由无方向性的边连接的一组顶点。与无向图相关的一个常见问题是计算图中邻居节点和最大为K的节点数量。在计算机科学中,图论领域将处理给定矩阵中元素之间的连接关系。通常,图由边和节点元素组成。

统计图中节点数量

在这种情况下,所使用的图是无向图。无向图包含“N”个节点,“M”条边,并且需要满足条件以获取最多为K的节点数量。下面是一个由四个节点组成的无向图的常见示例。

C++ 统计邻居节点和最大为K的图中节点数量

示例

以四个顶点的邻接矩阵作为输入。

1 2
2 3
3 4
4 5

邻居是指节点的左侧或右侧节点。在上述情况中,节点1返回邻居总和为1,节点2返回邻居总和为2,节点3返回邻居总和为3,节点4返回邻居总和为2,最后节点5返回邻居总和为1。当邻居总和小于或等于K时,我们需要检查节点总和。因此,满足条件的节点只有1个,它的值为1。

方法1:使用递归函数计算图中邻居总和最多为K的节点数的C语言代码

邻接矩阵被初始化为输入,并且可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法来遍历列表。

算法

  • 第1步 - 所需的头文件是和,已包含在给定的程序中。

  • 第2步 - 将函数定义为具有三个参数graph,N和K,数据类型为int。

  • 第3步 - 计数变量初始化为0,并使用for循环从1到N迭代遍历图的相邻列表。

  • 第4步 - 边连接两个点A和B,它是给定邻接列表中的相邻节点。

  • 第5步 - 求和值存储在名为“sum”的变量中,它求和给定顶点中的权重或属性值。

  • 第6步 - 检查条件,判断sum值是否小于或等于K,如果是,则将计数增加1。

  • 第7步 - 最终输出包含图中邻居总和最多为K时节点数的计数。

示例

//The header files are included
#include <stdio.h>
#include <stdlib.h>

// Function defined with three arguments and declared as output
int output(int** graph, int node, int edges) {
   //Initializing the variable as 0
   int val = 0; 
   //for loop will iterate through the values
   for (int m = 1; m <= node; ++m) {
      int sum = 0;
      for (int neighbor = 1; neighbor <= node; ++neighbor) {
         sum += graph[m][neighbor];
      }
      //To check for the condition whether the sum value is less than or equal to edges
      if (sum <= edges) {
         //When equal it is incremented by one
         val++;
      }
   }

   return val;
}

// Main function to test the code
int main() {
   //Initializing the variables with values
   int node = 5, M = 4, edges = 2;

   int** graph = (int**)malloc((node+1)*sizeof(int*)); // Indexed from 1 to N 

   for(int i=0; i<=node; ++i){
      graph[i] = (int*)malloc((node+1)*sizeof(int));
      for(int j=0; j<=node; ++j){
         graph[i][j] = 0;
      }
   }

   // The edges values are declared in the graph
   graph[1][2] = 1;
   graph[2][1] = 1;
   graph[2][3] = 1;
   graph[3][2] = 1;
   graph[3][4] = 1;
   graph[4][3] = 1;
   graph[4][5] = 1;
   graph[5][4] = 1;
   //The function is called recursively with the parameters
   int nodeCount = output(graph, node, edges);

   printf("The total number of nodes with a sum of neighbors less than or equal to %d:\n%d\n", edges, nodeCount);

   return 0;
}

输出

The total number of nodes with a sum of neighbors less than or equal to 2:
5

结论

使用C程序,构建代码 – 我们可以使用递归函数实现对给定无向图的计数。该函数与三个参数一起递归调用。通过使用pushback功能并添加用户给出的值的邻居元素,得到条件。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程