Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bina graf yang tidak mengandungi sebarang pasangan nod bersebelahan dengan nilai yang sama

Bina graf yang tidak mengandungi sebarang pasangan nod bersebelahan dengan nilai yang sama

王林
王林ke hadapan
2023-09-14 14:33:03973semak imbas

Bina graf yang tidak mengandungi sebarang pasangan nod bersebelahan dengan nilai yang sama

Carta yang dibina mungkin merupakan tindakan pusat bukan pendua di mana tiada dua pusat bersebelahan berkongsi nilai yang sama. Setiap pusat mewakili nilai unik, dan tepi penyambung menyambungkan pusat tanpa nilai pendua. Rajah menggambarkan reka bentuk yang mengutamakan kepelbagaian dan keunikan, memastikan pusat bersebelahan sentiasa berbeza antara satu sama lain. Dengan mengikut peraturan ini, gambar rajah memupuk perwakilan tertumpu dan unik secara visual yang boleh relevan dalam bidang yang pelbagai seperti perancangan organisasi, visualisasi maklumat atau peruntukan sumber. Strukturnya mengelakkan kluster yang membosankan dan menggalakkan hubungan dinamik dan pelbagai antara pusat, menyumbang kepada perwakilan grafik yang lebih pendidikan dan menarik.

Kaedah penggunaan

  • Pembinaan rekursif

Binaan rekursif

Dalam teknik ini, carta dibina menggunakan fungsi rekursif. Pusat berjalan, nilainya, dan senarai nilai diluluskan sebagai sempadan untuk fungsi. Fungsi ini berfungsi untuk menambah kelebihan dengan nilai alternatif kepada mana-mana hab semasa pada setiap langkah. Jika ia berlaku, ia menambah kelebihan dan memerlukan nilai seterusnya secara rekursif. Jika ia tidak dapat menyambung ke hab yang sesuai, ia akan kembali ke hab utama dan mencuba nilai lain.

Algoritma

  • Mulakan dengan melukis graf yang jelas dan senaraikan nilai yang diperlukan untuk setiap pusat dalam graf.

  • Bangunkan fungsi rekursif yang dipanggil "constructGraph" yang mempunyai tiga sempadan: pusat semasa, nilainya dan senarai jisim yang tinggal.

  • Disimpan dalam fungsi "constructGraph":

  • a - Ingat pusat dan insentif berterusan yang berkaitan dengan carta

  • b - Tekankan melalui pusat kegigihan carta untuk melihat sama ada sebarang nilai di dalamnya berbeza daripada nilai pusat kegigihan.

  • a - Jika kita menemui hab dengan nilai alternatif, tambahkan kelebihan antara hab semasa dan hab semasa.

  • Dengan pusat berterusan sebagai pusat permulaan, untuk setiap nilai yang masih ada dalam senarai, panggil fungsi "constructGraph" berulang kali

Contoh

#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;
}

Output

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 

Kesimpulan

Mana-mana daripada tiga strategi ini boleh digunakan untuk membuat carta yang tidak mempunyai sebarang pusat bersebelahan dengan nilai yang sama. Kaedah yang dipilih bergantung pada prasyarat khusus, struktur maklumat terbuka dan kerumitan gambar rajah yang akan datang. Setiap kaedah menyediakan petua praktikal untuk membuat rajah tersebut dan boleh diperluaskan untuk menangani situasi yang lebih kompleks.

Atas ialah kandungan terperinci Bina graf yang tidak mengandungi sebarang pasangan nod bersebelahan dengan nilai yang sama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam