C++ 构建不包含具有相同值的相邻节点对的图

C++ 构建不包含具有相同值的相邻节点对的图

构建的图可能是一个非重复的关键课程,其中没有两个相邻的节点共享相同的值。每个节点代表一个特殊的值,连接的边连接不重复的值的节点。该图形体现了多样性和独特性优先的设计,确保相邻节点始终互不相同。遵循这个原则,图形呈现出一种紧凑和视觉上独特的表示,可以在组织规划、数据可视化或资源分配等不同领域中使用。它的结构避免了重复的集群,并促进了节点之间的动态和多样化联系,为更具信息性和吸引力的图形表示做出贡献。

使用的方法

  • 递归构造

递归构造

在这种技术中,使用递归功能构建图形。持续的节点、它的值和值列表作为参数传递给函数。函数在每步尝试将具有不同值的边添加到任一当前节点。如果成功添加,它将添加边并递归调用下一个值。如果无法连接到合适的节点,则返回到第一个节点并尝试使用不同的值。

步骤

  • 从空图开始,并列出您要为图中的每个节点提供的值的列表。

  • 编写一个名为“constructGraph”的递归功能,它有三个参数:当前节点、它的值和剩余值的列表。

  • 在“constructGraph”函数中:

  • a-记住当前节点及其相关的值。

  • b-遍历图中的节点,查看是否有与当前节点不同的值。

  • a-如果找到一个具有不同值的节点,则在当前节点和该节点之间添加一条边。

  • 以当前节点为起始节点,不断对列表中尚未使用的每个值调用“constructGraph”函数。

示例

#include <iostream>
#include <vector>
using namespace std;

const int N = 5; // Number of nodes in the graph

class Graph {
public:
   vector<int> graph[N];

   void constructGraph(int currentNode, int currentValue, vector<int>& 
remainingValues) {
      graph[currentNode].push_back(currentValue);
      for (int i = 0; i < N; ++i) {
         if (i != currentNode) {
            for (int j = 0; j < remainingValues.size(); ++j) {
               int nextValue = remainingValues[j];
               remainingValues.erase(remainingValues.begin() + j);
               constructGraph(i, nextValue, remainingValues);
               remainingValues.insert(remainingValues.begin() + j, nextValue);
            }
         }
      }
   }
};

int main() {
   Graph g;
   vector<int> values = {1, 2, 3};
   g.constructGraph(0, 0, values);

   for (int i = 0; i < N; ++i) {
      cout << "Node " << i << ": ";
      for (int neighbor : g.graph[i]) {
         cout << neighbor << " ";
      }
      cout << endl;
   }

   return 0;
}

输出

Node 0: 0 2 3 3 2 3 2 3 2 1 3 3 1 3 1 3 1 1 2 2 1 2 1 2 1 2 3 3 2 3 2 3 2 1 3 
3 1 3 1 3 1 1 2 2 1 2 1 2 1 2 3 3 2 3 2 3 2 1 3 3 1 3 1 3 1 1 2 2 1 2 1 2 1 2 
3 3 2 3 2 3 2 1 3 3 1 3 1 3 1 1 2 2 1 2 1 2 1 
Node 1: 1 3 2 3 2 3 2 3 2 2 3 1 3 1 3 1 3 1 3 2 1 2 1 2 1 2 1 3 2 2 3 3 2 3 2 
3 1 1 3 3 1 3 1 2 1 1 2 2 1 2 1 3 2 2 3 3 2 3 2 3 1 1 3 3 1 3 1 2 1 1 2 2 1 2 
1 3 2 2 3 3 2 3 2 3 1 1 3 3 1 3 1 2 1 1 2 2 1 2 1 
Node 2: 3 2 2 3 3 2 3 2 3 1 1 3 3 1 3 1 2 1 1 2 2 1 2 1 1 3 2 3 2 3 2 3 2 2 3 
1 3 1 3 1 3 1 3 2 1 2 1 2 1 2 1 3 2 3 2 2 3 3 2 3 1 3 1 1 3 3 1 2 1 2 1 1 2 2 
1 3 2 3 2 2 3 3 2 3 1 3 1 1 3 3 1 2 1 2 1 1 2 2 1 
Node 3: 3 2 3 2 2 3 3 2 3 1 3 1 1 3 3 1 2 1 2 1 1 2 2 1 3 2 3 2 2 3 3 2 3 1 3 
1 1 3 3 1 2 1 2 1 1 2 2 1 1 3 2 3 2 3 2 3 2 2 3 1 3 1 3 1 3 1 3 2 1 2 1 2 1 2 
1 3 2 3 2 3 2 2 3 3 1 3 1 3 1 1 3 2 1 2 1 2 1 1 2 
Node 4: 3 2 3 2 3 2 2 3 3 1 3 1 3 1 1 3 2 1 2 1 2 1 1 2 3 2 3 2 3 2 2 3 3 1 3 
1 3 1 1 3 2 1 2 1 2 1 1 2 3 2 3 2 3 2 2 3 3 1 3 1 3 1 1 3 2 1 2 1 2 1 1 2 1 3 
2 3 2 3 2 3 2 2 3 1 3 1 3 1 3 1 3 2 1 2 1 2 1 2 1

结论

可以使用三种策略之一创建一个没有具有相同值的相邻节点的图。所选择的方法取决于具体的要求、开放数据结构和产生图的复杂性。每种方法都提供了创建这种图的有用提示,并可扩展以应对更复杂的情况。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程