構建一個圖,該圖不包含任何一對具有相同值的相鄰節點


構建的圖可以是一個非重複的中心課程操作,其中沒有兩個相鄰的中心共享相同的價值。每個中心代表一個特殊的值,並且連線的邊連線中心而不重複值。此圖表體現了一種設計,其中優先考慮不同的質量和獨特性,確保相鄰的中心始終彼此不同。透過遵循此執行程式,圖表培養了一種鎖定且外在明顯的表示,這可能與組織計劃、資訊視覺化或資產分配等不同領域相關。其結構避免了乏味的組合並促進了中心之間動態和多樣化的關聯,有助於更具教育意義和吸引力的圖形表示。

使用的方法

  • 遞迴構建

遞迴構建

在這種技術中,圖是利用遞迴功能構建的。當前中心、其值和值的列表作為引數傳遞給功能。該功能嘗試在每個步驟中將具有不同值的邊新增到任何當前中心。如果確實如此,它會新增邊並遞迴地要求後續值。如果無法連線到合理的中心,它將返回到主中心並嘗試其他值。

演算法

  • 從一個清晰的圖表和一個您需要為圖表中的每個中心提供的值的列表開始。

  • 開發一個名為“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 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.