


Diberi graf akiklik, hitung jumlah minimum unsur pada setiap kedalaman
Graf yang tidak mengandungi sebarang kitaran atau gelung dipanggil graf akiklik. Pokok ialah graf akiklik di mana setiap nod disambungkan kepada nod unik yang lain. Graf asiklik juga dipanggil graf asiklik.
Perbezaan antara graf kitaran dan asiklik -
Graf Kitaran | ialah: Graf Kitaran |
Graf asiklik |
---|---|---|
Graf membentuk gelung tertutup. |
Carta tidak membentuk gelung tertutup. |
|
Gelung dalam tidak termasuk dalam carta |
Carta mengandungi setiap kedalaman. |
Contoh 1
Mari kita ambil contoh graf kitaran −
Apabila gelung tertutup wujud, graf kitaran terbentuk.

Rajah I mewakili graf kitaran dan tidak mengandungi nod kedalaman.
Contoh 2
diterjemahkan sebagai:Contoh 2
Mari kita ilustrasikan dengan contoh graf akiklik:

Nod akar pokok dipanggil nod kedalaman sifar. Dalam Rajah II, hanya terdapat satu punca pada kedalaman sifar, iaitu 2. Oleh itu ia dianggap sebagai nod dengan kedalaman minimum sifar.
Dalam nod kedalaman pertama, kita mempunyai 3 elemen nod seperti 4, 9 dan 1, tetapi elemen terkecil ialah 4.
Dalam nod kedalaman kedua kita sekali lagi mempunyai 3 elemen nod seperti 6, 3 dan 1 tetapi elemen terkecil ialah 1.
Kita akan tahu bagaimana jumlah nod kedalaman diperolehi,
Jumlah nod kedalaman = Nilai minimum nod Zero_Depth + Nilai minimum nod First_Depth + Nilai minimum nod Zero_Depth
Jumlah nod kedalaman = 2 + 4 + 3 = 9. Jadi, 9 ialah jumlah jumlah minimum graf akiklik.
tatabahasa
The following syntax used in the program: struct name_of_structure{ data_type var_name; // data member or field of the structure. }
struct − Kata kunci ini digunakan untuk mewakili jenis data struktur.
name_of_struct - Kami menyediakan sebarang nama untuk struktur.
Struktur ialah himpunan pelbagai pembolehubah yang berkaitan di satu tempat.
Queue < pair < datatype, datatype> > queue_of_pair
make_pair()
parameter
Gandingkan baris gilir dalam C++ -
Ini ialah templat STL generik untuk menggabungkan pasangan baris gilir dua jenis data berbeza, pasangan baris gilir terletak di bawah fail pengepala utiliti.
Queue_of_pair - Kami memberikan sebarang nama kepada pasangan itu.
make_pair() - Digunakan untuk membina objek berpasangan dengan dua elemen.
name_of_queue.push()
parameter
name_of_queue - Kami menamakan nama baris gilir.
push() − Ini ialah kaedah pratakrif yang merupakan sebahagian daripada kepala barisan Kaedah tolak digunakan untuk memasukkan elemen. atau nilai.
name_of_queue.pop()
parameter
nama_baris − Kami menamakan baris gilir.
pop() − Ini ialah kaedah pratakrif yang dimiliki oleh fail pengepala baris gilir dan kaedah pop digunakan untuk memadam keseluruhan elemen atau nilai.
Algoritma
Kami akan memulakan fail header program iaitu 'iostream', 'climits', 'utility', dan 'queue'.
< /里>Kami sedang mencipta struktur "tree_node" dengan nilai integer "val" untuk mendapatkan nilai nod. Kami kemudian mencipta tree_node pointer dengan data yang diberikan untuk memulakan nod anak kiri dan nod anak kanan untuk menyimpan nilai. Seterusnya, kami mencipta fungsi tree_node di mana int x diluluskan sebagai parameter dan sahkan bahawa ia sama dengan 'val' integer dan tetapkan nod anak kiri dan kanan sebagai null.
Sekarang kita akan mentakrifkan fungsi jumlah_minimum_at_each_depth() yang menerima nilai integer sebagai hujah untuk mencari jumlah minimum pada setiap kedalaman. Menggunakan pernyataan if-, ia menyemak sama ada nilai akar pokok itu kosong dan mengembalikan 0 jika ia kosong.
Kami sedang mencipta pasangan baris gilir STL (Perpustakaan Templat Standard) untuk menggabungkan dua nilai.
Kami mencipta pembolehubah baris gilir bernama q yang melaksanakan dua kaedah sebagai pasangan, iaitu push() dan make_pair()#🎜 🎜#. Menggunakan dua kaedah ini, kami memasukkan nilai dan membina dua pasangan objek.
- Kami sedang memulakan tiga pembolehubah iaitu 'present_depth', 'present_sum' dan 'totalSum' yang akan digunakan untuk mencari lagi jumlah semasa serta mencari jumlah minimum.
- Selepas memulakan pembolehubah, kami mencipta gelung sementara untuk menyemak keadaan, jika pasangan baris gilir tidak kosong, kiraan nod akan bermula dari awal. Seterusnya, kami menggunakan kaedah
‘pop()’ untuk mengalih keluar nod sedia ada kerana ia akan dialihkan ke kedalaman pokok seterusnya untuk mengira jumlah minimum.
- Sekarang kita akan mencipta tiga penyata if untuk mengembalikan jumlah minimum jumlah.
- Selepas ini, kami akan memulakan fungsi utama dan membina struktur pokok mod input dengan bantuan penuding akar dan subnod kiri dan kanan masing-masing, dan lulus #🎜🎜 baharu #'tree_node'#🎜🎜 #Lulus nilai nod.
- dan lulus punca parameter untuk mengira jumlah minimum pada setiap kedalaman. Seterusnya, cetak pernyataan "jumlah setiap kedalaman graf asiklik" dan dapatkan hasilnya.
ialah:
ContohDalam program ini, kami akan mengira jumlah semua nod minimum untuk setiap kedalaman.
Dalam Rajah 2, jumlah minimum jumlah kedalaman ialah 15+8+4+1 = 13.
现在我们将把这个数字作为该程序的输入。
#include <iostream> #include <queue> // required for FIFO operation #include <utility> // required for queue pair #include <climits> using namespace std; // create the structure definition for a binary tree node of non-cycle graph struct tree_node { int val; tree_node *left; tree_node *right; tree_node(int x) { val = x; left = NULL; right = NULL; } }; // This function is used to find the minimum sum at each depth int minimum_sum_at_each_depth(tree_node* root) { if (root == NULL) { return 0; } queue<pair<tree_node*, int>> q; // create a queue to store node and depth and include pair to combine two together values. q.push(make_pair(root, 0)); // construct a pair object with two element int present_depth = -1; // present depth int present_sum = 0; // present sum for present depth int totalSum = 0; // Total sum for all depths while (!q.empty()) { pair<tree_node*, int> present = q.front(); // assign queue pair - present q.pop(); // delete an existing element from the beginning if (present.second != present_depth) { // We are moving to a new depth, so update the total sum and reset the present sum present_depth = present.second; totalSum += present_sum; present_sum = INT_MAX; } // Update the present sum with the value of the present node present_sum = min(present_sum, present.first->val); //We are adding left and right children to the queue for updating the new depth. if (present.first->left) { q.push(make_pair(present.first->left, present.second + 1)); } if (present.first->right) { q.push(make_pair(present.first->right, present.second + 1)); } } // We are adding the present sum of last depth to the total sum totalSum += present_sum; return totalSum; } // start the main function int main() { tree_node *root = new tree_node(15); root->left = new tree_node(14); root->left->left = new tree_node(11); root->left->right = new tree_node(4); root->right = new tree_node(8); root->right->left = new tree_node(13); root->right->right = new tree_node(16); root->left->left->left = new tree_node(1); root->left->right->left = new tree_node(6); root->right->right->right = new tree_node(2); root->right->left->right = new tree_node(7); cout << "Total sum at each depth of non cycle graph: " << minimum_sum_at_each_depth(root) << endl; return 0; }
输出
Total sum at each depth of non cycle graph: 28
结论
我们探讨了给定非循环图中每个深度的元素最小和的概念。我们看到箭头运算符连接节点并构建树形结构,利用它计算每个深度的最小和。该应用程序使用非循环图,例如城市规划、网络拓扑、谷歌地图等。
Atas ialah kandungan terperinci Diberi graf akiklik, hitung jumlah minimum unsur pada setiap kedalaman. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Struktur Data Bahasa C: Perwakilan data pokok dan graf adalah struktur data hierarki yang terdiri daripada nod. Setiap nod mengandungi elemen data dan penunjuk kepada nod anaknya. Pokok binari adalah jenis pokok khas. Setiap nod mempunyai paling banyak dua nod kanak -kanak. Data mewakili structtreenode {intData; structtreenode*left; structtreenode*right;}; Operasi mewujudkan pokok traversal pokok (predecision, in-order, dan kemudian pesanan) Node Node Carian Pusat Node Node adalah koleksi struktur data, di mana unsur-unsur adalah simpul, dan mereka boleh dihubungkan bersama melalui tepi dengan data yang betul atau tidak jelas yang mewakili jiran.

Kebenaran mengenai masalah operasi fail: Pembukaan fail gagal: Kebenaran yang tidak mencukupi, laluan yang salah, dan fail yang diduduki. Penulisan data gagal: Penampan penuh, fail tidak boleh ditulis, dan ruang cakera tidak mencukupi. Soalan Lazim Lain: Traversal fail perlahan, pengekodan fail teks yang salah, dan kesilapan bacaan fail binari.

Fungsi bahasa C adalah asas untuk modularization kod dan bangunan program. Mereka terdiri daripada pengisytiharan (tajuk fungsi) dan definisi (badan fungsi). Bahasa C menggunakan nilai untuk lulus parameter secara lalai, tetapi pembolehubah luaran juga boleh diubahsuai menggunakan lulus alamat. Fungsi boleh mempunyai atau tidak mempunyai nilai pulangan, dan jenis nilai pulangan mestilah selaras dengan perisytiharan. Penamaan fungsi harus jelas dan mudah difahami, menggunakan nomenclature unta atau garis bawah. Ikuti prinsip tanggungjawab tunggal dan pastikan kesederhanaan fungsi untuk meningkatkan kebolehkerjaan dan kebolehbacaan.

Pengiraan C35 pada dasarnya adalah matematik gabungan, yang mewakili bilangan kombinasi yang dipilih dari 3 dari 5 elemen. Formula pengiraan ialah C53 = 5! / (3! * 2!), Yang boleh dikira secara langsung oleh gelung untuk meningkatkan kecekapan dan mengelakkan limpahan. Di samping itu, memahami sifat kombinasi dan menguasai kaedah pengiraan yang cekap adalah penting untuk menyelesaikan banyak masalah dalam bidang statistik kebarangkalian, kriptografi, reka bentuk algoritma, dll.

Definisi nama fungsi bahasa C termasuk: jenis nilai pulangan, nama fungsi, senarai parameter dan badan fungsi. Nama fungsi harus jelas, ringkas dan bersatu dalam gaya untuk mengelakkan konflik dengan kata kunci. Nama fungsi mempunyai skop dan boleh digunakan selepas pengisytiharan. Penunjuk fungsi membolehkan fungsi diluluskan atau ditugaskan sebagai hujah. Kesalahan umum termasuk konflik penamaan, ketidakcocokan jenis parameter, dan fungsi yang tidak diisytiharkan. Pengoptimuman prestasi memberi tumpuan kepada reka bentuk dan pelaksanaan fungsi, sementara kod yang jelas dan mudah dibaca adalah penting.

C Language Multithreading Programming Guide: Mencipta Threads: Gunakan fungsi pthread_create () untuk menentukan id thread, sifat, dan fungsi benang. Penyegerakan Thread: Mencegah persaingan data melalui mutexes, semaphores, dan pembolehubah bersyarat. Kes praktikal: Gunakan multi-threading untuk mengira nombor Fibonacci, menetapkan tugas kepada pelbagai benang dan menyegerakkan hasilnya. Penyelesaian Masalah: Menyelesaikan masalah seperti kemalangan program, thread stop responses, dan kesesakan prestasi.

F Fungsi bahasa adalah blok kod yang boleh diguna semula. Mereka menerima input, melakukan operasi, dan hasil pulangan, yang secara modular meningkatkan kebolehgunaan dan mengurangkan kerumitan. Mekanisme dalaman fungsi termasuk parameter lulus, pelaksanaan fungsi, dan nilai pulangan. Seluruh proses melibatkan pengoptimuman seperti fungsi dalam talian. Fungsi yang baik ditulis mengikut prinsip tanggungjawab tunggal, bilangan parameter kecil, penamaan spesifikasi, dan pengendalian ralat. Penunjuk yang digabungkan dengan fungsi dapat mencapai fungsi yang lebih kuat, seperti mengubahsuai nilai pembolehubah luaran. Pointer fungsi meluluskan fungsi sebagai parameter atau alamat kedai, dan digunakan untuk melaksanakan panggilan dinamik ke fungsi. Memahami ciri dan teknik fungsi adalah kunci untuk menulis program C yang cekap, boleh dipelihara, dan mudah difahami.

Bagaimana untuk mengeluarkan undur di C? Jawapan: Gunakan pernyataan gelung. Langkah -langkah: 1. Tentukan pembolehubah N dan simpan nombor undur ke output; 2. Gunakan gelung sementara untuk terus mencetak n sehingga n adalah kurang dari 1; 3. Dalam badan gelung, cetak nilai n; 4. Pada akhir gelung, tolak n dengan 1 untuk mengeluarkan timbal balik yang lebih kecil seterusnya.
