Masalah rajah Peterson dalam program C
Andaikan kita mempunyai graf seperti yang ditunjukkan di bawah. Graf ini ialah gambar rajah Peterson. Bucu dinomborkan dari 0 hingga 9. Setiap bucu mempunyai beberapa huruf. Pertimbangkan berjalan W pada graf ini menggunakan bucu L. Apabila urutan huruf dalam berjalan W adalah sama dengan S, rentetan S direalisasikan dengan berjalan W. Kita boleh melawati puncak beberapa kali.
Sebagai contoh, rentetan S serupa dengan "ABBECCD", yang dilaksanakan dengan berjalan kaki (0, 1, 6, 9, 7, 2, 3). Tugas kami adalah untuk mencari jalan-jalan seperti itu dan, jika jalan-jalan sedemikian wujud, cari jalan-jalan terkecil dari segi leksikografi. Jika tiada jalan seperti itu, -1 dikembalikan.
Algoritma
petersonGraphWalk(S, v) - Terjemahan bahasa Cina bagi
begin res := starting vertex for each character c in S except the first one, do if there is an edge between v and c in outer graph, then v := c else if there is an edge between v and c+5 in inner graph, then v := c + 5 else return false end if put v into res done return true end
Contoh
ialah:Contoh
#include<iostream> using namespace std; bool adj_mat[10][10] = {{0, 1, 0, 0, 1, 1, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 1, 0, 0, 0, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 1, 1, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 1, 1, 0, 0} }; char S[100005]; char res[100005]; bool petersonGraphWalk(char* S, int v){ res[0] = v + '0'; for(int i = 1; S[i]; i++){ //traverse the outer graph if(adj_mat[v][S[i] - 'A'] || adj_mat[S[i] - 'A'][v]){ v = S[i] - 'A'; } //then check the inner graph else if(adj_mat[v][S[i] - 'A' + 5] || adj_mat[S[i] - 'A' + 5][v]){ v = S[i] - 'A' + 5; }else{ return false; } res[i] = v + '0'; } return true; } main() { char* str = "ABBECCD"; if(petersonGraphWalk(str, str[0] - 'A') || petersonGraphWalk(str, str[0] - 'A' + 5)){ cout << res; }else{ cout << -1; } }
Output
rreeeAtas ialah kandungan terperinci Masalah rajah Peterson dalam program C. 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











Dalam pengaturcaraan serentak, mutex dan bahagian kritikal digunakan untuk menghalang perlumbaan data. Mutex ialah struktur data yang membenarkan hanya satu utas untuk mengakses sumber yang dikongsi pada satu masa Pelaksanaan khusus adalah seperti berikut: Tentukan kelas Mutex dengan tag atom. Gunakan kaedah test_and_set() untuk mengunci dan kaedah clear() untuk membuka kunci. Bahagian kritikal ialah bahagian kod yang hanya boleh dilaksanakan oleh satu utas pada satu masa Pelaksanaan khusus adalah seperti berikut: mengisytiharkan mutex. Gunakan pembungkus lock_guard untuk mengakses sumber kongsi dalam bahagian kritikal.

Cara mengendalikan penyegerakan berbilang benang dan akses yang saling eksklusif dalam pembangunan C# memerlukan contoh kod khusus Dalam pembangunan C#, penggunaan berbilang benang boleh meningkatkan keselarasan dan prestasi program. Walau bagaimanapun, pelaksanaan serentak berbilang rangkaian juga boleh menyebabkan beberapa masalah, seperti persaingan data dan konflik sumber. Untuk menyelesaikan masalah ini, kita perlu menggunakan mekanisme penyegerakan dan pengecualian bersama untuk memastikan kerjasama yang betul antara rangkaian. Penyegerakan merujuk kepada pelaksanaan berbilang utas dalam susunan tertentu untuk memastikan hubungan kerjasama antara utas. Pengecualian bersama bermakna hanya satu urutan dibenarkan untuk mengakses sumber yang dikongsi pada masa yang sama.

Cara menangani isu penyegerakan berbilang benang dan pengecualian bersama dalam pembangunan C# memerlukan gambaran keseluruhan contoh kod tertentu: Dalam C#, penggunaan berbilang benang telah menjadi keperluan pembangunan biasa. Walau bagaimanapun, memandangkan berbilang rangkaian yang mengendalikan sumber dikongsi secara serentak boleh menyebabkan ketidakkonsistenan atau konflik data, mekanisme penyegerakan dan pengecualian bersama perlu digunakan untuk menyelesaikan masalah ini. Artikel ini akan memperkenalkan cara menangani penyegerakan berbilang benang dan isu pengecualian bersama dalam pembangunan C#, dan menyediakan contoh kod khusus. Konsep penyegerakan benang Apabila berbilang benang mengendalikan sumber yang dikongsi pada masa yang sama, ketidakkonsistenan data atau konflik mungkin berlaku.

Dengan pembangunan Internet yang berterusan, PHP, sebagai bahasa skrip utama bahagian pelayan, digemari oleh semakin ramai pembangun. Dalam program yang ditulis dalam PHP, isu penyegerakan dan pengecualian bersama sering perlu dipertimbangkan. Artikel ini akan memperkenalkan anda kepada mekanisme penyegerakan dan pengecualian bersama dalam PHP dari perspektif pengenalan. 1. Apakah penyegerakan dan pengecualian bersama sebelum memahami penyegerakan dan pengecualian bersama, kita perlu terlebih dahulu memahami konsep konkurensi. Konkurensi yang dipanggil merujuk kepada pelaksanaan serentak beberapa utas dalam tempoh masa yang sama. Berbilang rangkaian ini boleh menyebabkan isu persaingan sumber.

临界区是指并发进程中访问共享变量的程序段。临界区指的是一个访问共用资源的程序片段,而这些共用资源又无法同时被多个线程访问的特性。每次只准许一个进程进入临界区,进入后不允许其他进程进入。

: Gambaran Keseluruhan Penyegerakan Benang Java dan Pengecualian Bersama Di Java, penyegerakan benang dan pengecualian bersama ialah teknik untuk memastikan perlumbaan data atau ketidakkonsistenan lain tidak berlaku apabila berbilang benang berkongsi data. Penyegerakan benang bermakna apabila berbilang benang mengakses data kongsi, mereka menyelaraskan akses mereka melalui beberapa mekanisme untuk memastikan ketekalan dan integriti data. Pengecualian bersama utas bermakna hanya satu utas boleh mengakses data kongsi dan utas lain hanya boleh menunggu. Mekanisme Penyegerakan Benang Java Java menyediakan pelbagai mekanisme penyegerakan benang, yang paling biasa ialah kunci dan monitor. Kunci ialah mekanisme penyegerakan peringkat rendah yang membolehkan benang memperoleh kunci sebelum memasuki bahagian kritikal (iaitu, blok kod tempat data kongsi terletak) dan lepaskan kunci selepas keluar dari bahagian kritikal. Monitor ialah penyegerakan lanjutan

Dalam sains komputer, pengaturcaraan serentak ialah apabila program boleh melaksanakan pelbagai tugas secara serentak. Ia sering digunakan untuk menggunakan sepenuhnya kuasa pengkomputeran pemproses berbilang teras dan memainkan peranan penting dalam bidang seperti antara muka pengguna, komunikasi rangkaian dan operasi pangkalan data. Walau bagaimanapun, pengaturcaraan serentak juga membawa beberapa cabaran, yang paling penting ialah cara memastikan ketekalan data dan ketepatan program apabila berbilang rangkaian mengakses sumber yang dikongsi secara serentak. Java menyediakan penyegerakan benang yang kaya dan mekanisme pengecualian bersama untuk membantu pembangun menyelesaikan cabaran dalam pengaturcaraan serentak. Mekanisme ini terutamanya termasuk kunci, operasi atom dan kata kunci yang tidak menentu. Kunci digunakan untuk melindungi sumber kongsi Ia membenarkan satu utas memonopoli sumber kongsi apabila mengaksesnya, menghalang utas lain daripada mengaksesnya pada masa yang sama, sekali gus mengelakkan ketidakkonsistenan data dan ranap program.

Katakan kita mempunyai graf seperti yang ditunjukkan di bawah. Graf ini ialah gambar rajah Peterson. Bucu dinomborkan dari 0 hingga 9. Setiap bucu mempunyai beberapa huruf. Pertimbangkan berjalan W pada graf ini menggunakan bucu L. Apabila urutan huruf dalam berjalan W adalah sama dengan S, rentetan S direalisasikan dengan berjalan W. Kita boleh melawati puncak beberapa kali. Sebagai contoh, rentetan S adalah serupa dengan "ABBECCD", yang dicapai dengan berjalan (0,1,6,9,7,2,3). Tugas kami adalah untuk mencari jalan-jalan seperti itu dan, jika jalan-jalan sedemikian wujud, cari jalan-jalan terkecil dari segi leksikografi. Jika tiada jalan seperti itu, -1 dikembalikan. Algoritma petersonGraphWalk(S,v)-mula &
