C プログラムのピーターソン図の問題
以下に示すようなグラフがあるとします。このグラフはピーターソン図です。頂点には 0 から 9 までの番号が付けられます。各頂点にはいくつかの文字があります。 L 個の頂点を使用して、このグラフ上で W を歩くことを考えます。ウォーキング W の文字列が S と同じ場合、文字列 S はウォーキング W によって実現されます。頂点を複数回訪問できます。
たとえば、文字列 S は「ABBECCD」に似ており、ウォーキング (0、1、6、9、7、2、3) によって実装されます。私たちの仕事は、そのようなウォークを見つけ、そのようなウォークが存在する場合、辞書編集上最小のウォークを見つけることです。そのような四球がない場合は、-1 が返されます。
Algorithm
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
の中国語訳は次のとおりです: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 + '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
rreeee以上がC プログラムのピーターソン図の問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











同時プログラミングでは、データ競合を防ぐためにミューテックスとクリティカル セクションが使用されます。 Mutex は、一度に 1 つのスレッドのみが共有リソースにアクセスできるようにするデータ構造です。具体的な実装は次のとおりです。 アトミック タグを使用して Mutex クラスを定義します。ロックするには test_and_set() メソッドを使用し、ロックを解除するには clear() メソッドを使用します。クリティカル セクションは、一度に 1 つのスレッドによってのみ実行できるコードのセクションです。具体的な実装は次のとおりです。ミューテックスを宣言します。 lock_guard ラッパーを使用して、重要なセクションの共有リソースにアクセスします。

C# 開発でマルチスレッドの同期と相互排他的アクセスを処理する方法には、特定のコード サンプルが必要です。C# 開発では、マルチスレッドを使用すると、プログラムの同時実行性とパフォーマンスが向上します。ただし、複数のスレッドを同時に実行すると、データの競合やリソースの競合などの問題が発生する可能性があります。これらの問題を解決するには、同期および相互排他メカニズムを使用して、スレッド間の正しい連携を確保する必要があります。同期とは、スレッド間の協力関係を確保するために、複数のスレッドを特定の順序で実行することを指します。相互排他とは、同時に 1 つのスレッドのみが共有リソースにアクセスできることを意味します。

C# 開発でマルチスレッドの同期と相互排他の問題に対処する方法には、特定のコード例の概要が必要です。C# では、マルチスレッドの使用が一般的な開発要件になっています。ただし、共有リソースを同時に操作する複数のスレッドはデータの不整合や競合を引き起こす可能性があるため、これらの問題を解決するには同期および相互排他メカニズムを使用する必要があります。この記事では、C# 開発におけるマルチスレッドの同期と相互排他の問題に対処する方法を紹介し、具体的なコード例を示します。スレッド同期の概念 複数のスレッドが共有リソースを同時に操作すると、データの不整合や競合が発生する可能性があります。

インターネットの継続的な発展に伴い、PHP は主要なサーバーサイド スクリプト言語として、ますます多くの開発者に好まれています。 PHP で書かれたプログラムでは、多くの場合、同期と相互排他の問題を考慮する必要があります。この記事では、PHP の同期および相互排他メカニズムを初心者レベルの観点から紹介します。 1. 同期と相互排他とは何ですか? 同期と相互排他を理解する前に、まず同時実行性の概念を理解する必要があります。いわゆる同時実行性とは、同じ期間内で複数のスレッドを同時に実行することを指します。これらの複数のスレッドにより、リソース競合の問題が発生する可能性があります。

クリティカル セクションとは、同時プロセスで共有変数にアクセスするプログラム セグメントを指します。クリティカル セクションとは、共有リソースにアクセスするプログラムの断片を指します。これらの共有リソースには複数のスレッドが同時にアクセスすることはできません。クリティカルセクションに入ることができるのは一度に 1 つのプロセスのみであり、入った後は他のプロセスが入ることはできません。

:Java スレッド同期と相互排除の概要 Java では、スレッド同期と相互排除は、複数のスレッドがデータを共有するときにデータ競合やその他の不整合が発生しないようにするための手法です。スレッドの同期とは、複数のスレッドが共有データにアクセスするときに、何らかのメカニズムを通じてアクセスを調整し、データの一貫性と整合性を確保することを意味します。スレッド相互排他とは、1 つのスレッドのみが共有データにアクセスでき、他のスレッドは待機のみできることを意味します。 Java スレッド同期メカニズム Java はさまざまなスレッド同期メカニズムを提供しますが、最も一般的なのはロックとモニターです。ロックは、スレッドがクリティカル セクション (共有データが配置されているコード ブロック) に入る前にロックを取得し、クリティカル セクションを出た後にロックを解放できるようにする低レベルの同期メカニズムです。モニターは高度な同期機能です

コンピューターサイエンスにおいて、同時プログラミングとは、プログラムが複数のタスクを同時に実行できることを指します。マルチコア プロセッサの計算能力を最大限に活用するためによく使用され、ユーザー インターフェイス、ネットワーク通信、データベース操作などの分野で重要な役割を果たします。ただし、同時プログラミングにはいくつかの課題も伴います。その中で最も重要なのは、複数のスレッドが共有リソースに同時にアクセスするときに、データの一貫性とプログラムの正確さをどのように確保するかです。 Java は、開発者が並行プログラミングの課題を解決できるように、豊富なスレッド同期および相互排他メカニズムを提供します。これらのメカニズムには主に、ロック、アトミック操作、および volatile キーワードが含まれます。ロックは共有リソースを保護するために使用されます。ロックにより、1 つのスレッドが共有リソースにアクセスするときにその共有リソースを独占できるようになり、他のスレッドが同時にアクセスすることがなくなり、データの不整合やプログラムのクラッシュが回避されます。

以下に示すようなグラフがあるとします。このグラフはピーターソン図です。頂点には 0 から 9 までの番号が付けられます。各頂点にはいくつかの文字があります。 L 個の頂点を使用して、このグラフ上で W を歩くことを考えます。ウォーキング W の文字列が S と同じ場合、文字列 S はウォーキング W によって実現されます。頂点を複数回訪問できます。たとえば、文字列 S は「ABBECCD」に似ており、(0,1,6,9,7,2,3) を歩くことで実現されます。私たちの仕事は、そのようなウォークを見つけ、そのようなウォークが存在する場合、辞書編集上最小のウォークを見つけることです。そのような四球がない場合は、-1 が返されます。アルゴリズム PetersonGraphWalk(S,v)-begin &
