构建一个图,该图不包含任何一对具有相同值的相邻节点


构建的图可以是一个非重复的中心课程操作,其中没有两个相邻的中心共享相同的价值。每个中心代表一个特殊的值,并且连接的边连接中心而不重复值。此图表体现了一种设计,其中优先考虑不同的质量和独特性,确保相邻的中心始终彼此不同。通过遵循此运行程序,图表培养了一种锁定且外在明显的表示,这可能与组织计划、信息可视化或资产分配等不同领域相关。其结构避免了乏味的组合并促进了中心之间动态和多样化的关联,有助于更具教育意义和吸引力的图形表示。

使用的方法

  • 递归构建

递归构建

在这种技术中,图是利用递归功能构建的。当前中心、其值和值的列表作为参数传递给功能。该功能尝试在每个步骤中将具有不同值的边添加到任何当前中心。如果确实如此,它会添加边并递归地要求后续值。如果无法连接到合理的中心,它将返回到主中心并尝试其他值。

算法

  • 从一个清晰的图表和一个您需要为图表中的每个中心提供的值的列表开始。

  • 开发一个名为“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 

结论

可以使用三种方法中的任何一种来创建没有任何相邻中心具有相同值的图。选择的方法取决于具体的要求、开放的数据结构和生成的图的复杂性。每种方法都为创建此类图表提供了有用的提示,并且可以扩展以解决更复杂的情况。

更新于: 2023年8月4日

52 次查看

启动你的 职业生涯

通过完成课程获得认证

开始
广告