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