特定のプロセス図を通る一連の非反復パスを確立する合理的な方法で可能かどうかを理解しようとしています。
ここに私が持っているプロセス図に関するいくつかの基本的な事実があります:
- 1 つ以上の開始点がある
- 1 つ以上のエンドポイントがある
- すべての始点には、そこからつながる 1 つのコネクタがあります
- すべてのステップには、少なくとも 1 つ以上の受信コネクタと 1 つ以上の送信コネクタがあります。
- 次のものが複数ある場合は、それぞれに名前を付ける必要があります。
- ターミネーターを開始
- 終了ターミネーター
- ステップからつながる接続
必要と思われるすべてのデータにアクセスできます (すべての開始点の検索、すべての接続の取得、接続の名前など)。
基本的には、始点から終点までの過程で、円を繰り返し回らないユニークなパスをできるだけ多く見つけたいと考えています。したがって、同じステップを数回実行できますが、特定のルートで完全な回路を複数回繰り返すことはできません。
これは、人々が論文を書き、それができるかできないかの証拠を持っているようなものです.私はそれをグーグルで検索する必要がある魔法の言葉を知りません;-) Sudoコードまたは同様のものは理想的です(そして素晴らしいです)しかし、誰かが私を正しい方向に向けることができれば、私は喜んで自分の読書をします.
検索用語の提案は非常に歓迎され、非常に高く評価されています
後で人間がレビューする必要がある多くの余分な「ばかげた」可能性を示唆するソリューションに興味があることに注意してください-それが生成したものを見るのはまだ興味深いでしょう.
物事を明確にするためのちょっとした例:
G<--2-E<--1-F-2--|
| | ^ |
| 1 | |
| | 2 |
\/ \/ | \/
start--->A--->B---->C-1->D---end
経由するいくつかのルート:
- 開始、A、B、C:1、D、終了
- 開始、A、B、C:2、F:1、E:1、B、C:1、D、終了
- 開始、A、B、C:2、F:1、E:2、G、A、B、C:1、D、終了
- 開始、A、B、C:2、F:2、D、終了
素晴らしいですが、もっと興味深いものはどうですか:
- 開始、A、B、C:2、F:1、E:2、G、A、B、C:2、F:1、B、C:2、F:2、D、終了
私は C を 3 回押し、そのたびにオプション 2 を選択しましたが、繰り返しはありません。
余分なポイント:複数のアウトバウンドコネクタを持つノードのいくつかを、プロセスの特定の実行内で一貫しているとマークできると考えていました..たとえば、2つの決定ポイント「言語」を持つ「コードを書く」プロセスがある場合アウトバウンド コネクタ "c#" および "java" このプロセスの特定の実行内では、常に c# または Java のいずれかであると言えます。これは、プロセスの実行中に変更されることはありません。「バグはありますか?」のように変化する可能性があるものとは対照的です。最初のパススルーでは「はい」となる可能性があり、2 回目のパススルーでは (いくつかのバグ修正手順の後 ;-) 結果が「いいえ」になる可能性があります。
この種の特別な分析/処理/定義に関連する用語またはテクニックを知っていますか?
編集: @Ishtar の回答に基づいて、JS で実装されたサンプル ソリューションを回答者として追加しました。