Rumah > pembangunan bahagian belakang > C++ > 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

王林
Lepaskan: 2023-09-14 14:33:03
ke hadapan
1046 orang telah melayarinya

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;
}
Salin selepas log masuk

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 
Salin selepas log masuk

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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan