目錄
演算法
Example
範例
#輸出
首頁 後端開發 C++ C程序中的Peterson圖表問題

C程序中的Peterson圖表問題

Aug 26, 2023 am 11:01 AM
臨界區 互斥 peterson圖

假設我們有一個如下所示的圖形。這個圖形是彼得森圖。頂點從0到9編號。每個頂點都有一些字母。考慮一個在該圖中的行走W,其中使用了L個頂點。當行走W中的字母序列和S相同時,字串S由行走W實現。我們可以多次訪問頂點。

C程序中的Peterson圖表問題

例如,一個字串S類似於“ABBECCD”,這由行走(0, 1, 6, 9, 7, 2, 3)實現。我們的任務是找到這樣的行走,如果存在這樣的行走,則找到字典順序最小的行走。如果沒有這樣的行走,則回傳-1。

演算法

petersonGraphWalk(S, v) -

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
登入後複製

Example

的中文翻譯為:

範例

#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 + &#39;0&#39;;
   for(int i = 1; S[i]; i++){
      //traverse the outer graph
      if(adj_mat[v][S[i] - &#39;A&#39;] || adj_mat[S[i] - &#39;A&#39;][v]){
         v = S[i] - &#39;A&#39;;
      }
      //then check the inner graph
      else if(adj_mat[v][S[i] - &#39;A&#39; + 5] || adj_mat[S[i] - &#39;A&#39; + 5][v]){
         v = S[i] - &#39;A&#39; + 5;
      }else{
         return false;
      }
      res[i] = v + &#39;0&#39;;
   }
   return true;
}
main() {
   char* str = "ABBECCD";
   if(petersonGraphWalk(str, str[0] - &#39;A&#39;) || petersonGraphWalk(str, str[0] - &#39;A&#39; + 5)){
      cout << res;
   }else{
      cout << -1;
   }
}
登入後複製

#輸出

0169723
登入後複製

以上是C程序中的Peterson圖表問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1673
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
C++ 函式在並發程式設計中的互斥和臨界區實作? C++ 函式在並發程式設計中的互斥和臨界區實作? Apr 28, 2024 am 08:42 AM

在並發程式設計中,互斥和臨界區用於防止資料競爭。互斥是一個資料結構,允許一次只有一個執行緒存取共享資源,具體實作如下:定義一個帶有原子標記的Mutex類別。使用test_and_set()方法加鎖,並使用clear()方法解鎖。臨界區是一段程式碼,一次只能有一個執行緒執行,具體實作如下:宣告一個互斥量。使用lock_guard包裝器在臨界區中存取共享資源。

C#開發中如何處理多執行緒同步和互斥訪問 C#開發中如何處理多執行緒同步和互斥訪問 Oct 08, 2023 pm 05:57 PM

C#開發中如何處理多執行緒同步和互斥訪問,需要具體程式碼範例在C#開發中,多執行緒的使用可以提高程式的並發性和效能。然而,多執行緒的並發執行也可能導致一些問題,如資料競爭和資源衝突等。為了解決這些問題,我們需要使用同步和互斥機制來確保執行緒之間的正確協作。同步是指多個執行緒按照一定的順序來執行,以確保執行緒之間的協作關係。互斥是指在同一時間只允許一個執行緒存取某個共享資源,

C#開發中如何處理多執行緒同步與互斥問題 C#開發中如何處理多執行緒同步與互斥問題 Oct 10, 2023 pm 03:42 PM

C#開發中如何處理多執行緒同步和互斥問題,需要具體程式碼範例概述:在C#中,多執行緒的使用成為了常見的開發需求。然而,由於多執行緒同時操作共享資源可能導致資料不一致或衝突的問題,因此需要使用同步和互斥機制來解決這些問題。本文將介紹在C#開發中如何處理多執行緒的同步和互斥問題,並提供具體的程式碼範例。執行緒同步的概念在多執行緒同時操作共享資源時,可能會出現資料不一致或衝突的

PHP入門指南:同步與互斥 PHP入門指南:同步與互斥 May 21, 2023 am 08:10 AM

隨著網路的不斷發展,PHP作為一種主要的伺服器端腳本語言,受到越來越多開發人員的青睞。而在PHP所寫的程式中,常常需要考慮同步與互斥的問題。本文將從入門的角度出發,為大家介紹PHP中的同步與互斥機制。一、什麼是同步與互斥在理解同步和互斥之前,我們需要先了解並發的概念。所謂並發,指的是在同一時間段內,多個執行緒同時執行。而這多個執行緒之間可能會引發資源競爭的問題

臨界區是指並發進程中存取共享變數的什麼 臨界區是指並發進程中存取共享變數的什麼 Jan 14, 2021 pm 05:17 PM

臨界區是指在並發進程中存取共享變數的程式段。臨界區指的是存取共用資源的程式片段,而這些共用資源無法同時被多個執行緒存取的特性。每次只準許一個行程進入臨界區,進入後不允許其他行程進入。

Java執行緒同步與互斥:從零開始,打造高效的並發程序 Java執行緒同步與互斥:從零開始,打造高效的並發程序 Feb 19, 2024 pm 11:09 PM

:Java執行緒同步與互斥概述在Java中,執行緒同步和互斥是一種確保多個執行緒共享資料時不會出現資料競爭或其他不一致情況的技術。執行緒同步是指多個執行緒對共享資料進行存取時,透過某種機制來協調它們的訪問,以確保資料的一致性和完整性。而線程互斥是指只有一個執行緒能夠存取共享數據,其他執行緒只能等候。 Java執行緒同步機制Java中提供了多種執行緒同步機制,其中最常見的是鎖定和監視器。鎖是一種低階的同步機制,允許一個執行緒在進入臨界區(即共享資料所在的程式碼區塊)之前取得鎖,並在退出臨界區後釋放鎖。而監視器是一種進階的同步

Java線程同步與互斥:讓你的程式在並發世界裡舞動 Java線程同步與互斥:讓你的程式在並發世界裡舞動 Feb 19, 2024 pm 07:33 PM

在電腦科學中,並發程式設計是指一個程式可以同時執行多個任務。它通常用於充分利用多核心處理器的運算能力,並在使用者介面、網路通訊和資料庫操作等領域發揮重要作用。然而,並發程式設計也帶來了一些挑戰,其中最主要的是如何確保多個執行緒同時存取共享資源時的資料一致性和程式正確性。 Java提供了豐富的執行緒同步與互斥機制,幫助開發者解決並發程式設計中的挑戰。這些機制主要包括鎖定、原子操作和volatile關鍵字。鎖是用來保護共享資源的,它允許一個執行緒在訪問共享資源時獨佔該資源,防止其他執行緒同時訪問,從而避免資料不一致和程式崩

C程序中的Peterson圖表問題 C程序中的Peterson圖表問題 Aug 26, 2023 am 11:01 AM

假設我們有一個如下所示的圖形。這個圖形是彼得森圖。頂點從0到9編號。每個頂點都有一些字母。考慮一個在該圖中的行走W,其中使用了L個頂點。當行走W中的字母序列和S相同時,字串S由行走W實現。我們可以多次訪問頂點。例如,一個字串S類似於“ABBECCD”,這由行走(0,1,6,9,7,2,3)實現。我們的任務是找到這樣的行走,如果存在這樣的行走,則找到字典順序最小的行走。如果沒有這樣的行走,則回傳-1。演算法petersonGraphWalk(S,v)-begin &

See all articles