タグ付けされた質問 「graph-theory」

グラフに関する問題については、オブジェクト間の関係をモデル化するために使用される数学的構造。

30
int入力nを指定して、n * reversed(n)を出力します
整数nを指定して出力n * reversed(n) reversed(n)は、reverseの桁を取得したときに取得する数値ですn。 reverse(512) = 215 reverse(1) = 1 reverse(101) = 101 >>>>>>>> func(5) = 5*5 = 25 func(12) = 12*21 = 252 func(11) = 11*11 = 121 func(659) = 659*956 = 630004 最短のコードが勝ちます! リーダーボード コードスニペットを表示 var QUESTION_ID=144816,OVERRIDE_USER=71625;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var …
9 code-golf  math  arithmetic  code-golf  math  integer  code-golf  arithmetic  integer  code-golf  sequence  base-conversion  palindrome  code-golf  math  primes  integer  code-golf  parsing  conversion  syntax  code-golf  sequence  primes  code-challenge  geometry  optimization  code-golf  graph-theory  code-golf  number-theory  primes  integer  code-golf  source-layout  cops-and-robbers  code-golf  source-layout  cops-and-robbers  code-golf  sequence  primes  integer  code-golf  math  number-theory  primes  rational-numbers  code-golf  math  sequence  number-theory  primes  code-golf  string  code-golf  math  combinatorics  permutations  restricted-complexity  code-golf  array-manipulation  code-golf  number  sequence  code-golf  number  sequence  code-golf  binary-matrix  code-golf  math  tips  javascript  algorithm  code-golf  string  code-golf  number  sequence  code-golf  math  arithmetic  parsing  code-golf  number  sequence  primes  code-golf  string  ascii-art  geometry  integer  code-golf  geometry  code-golf  number  array-manipulation  code-golf  math  geometry  code-golf  number  sequence  arithmetic  integer  code-golf  string  kolmogorov-complexity  code-golf  number  code-golf  number  chess  code-golf  sequence  decision-problem  subsequence  code-golf  math  number  primes  code-golf  primes  permutations  code-golf  integer  probability-theory  statistics  code-golf  string  code-golf  sequence  decision-problem  parsing  board-game  code-golf  binary  graph-theory  code-golf  board-game  classification  tic-tac-toe  code-golf  ascii-art  polyglot  code-golf  date  code-golf  geometry 

6
与えられたツリーがそのプリュファーコードを生成する
では、グラフ理論Prüferコードは、特定のツリーを示し整数のユニークなシーケンスです。 ウィキペディアから取得した次のアルゴリズムを使用して、ツリーのPrüferコードを見つけることができます。 頂点を持つラベル付きツリーTを考え{1, 2, ..., n}ます。ステップiで、最小のラベルを持つ葉を削除し、Prüferシーケンスのi番目の要素をこの葉の近傍のラベルに設定します。 (これは葉なので、隣人は1つだけであることに注意してください)。 グラフに頂点が2つだけ残っている場合は、反復を停止する必要があります。 仕事 ラベル付きツリーを入力出力として指定すると、そのプリュファーコード。合理的な方法で入力することができます。隣接行列や言語の組み込みグラフ表現など。(入力をPrüferコードとして受け取ることはできません)。 これはコードゴルフなので、ソースのバイト数を最小限にすることを目指してください。 テストケース 以下は、ASCIIの入力とその出力です。このようなASCII入力をサポートする必要はありません。 3 | 1---2---4---6 | 5 {2,2,2,4} 1---4---3 | 5---2---6---7 | 8 {4,4,2,6,2,5} 5---1---4 6 | | 2---7---3 {1,1,2,7,3}

5
ハイパーキューブを歩く
私は最近、グラフ理論、特にハイパーキューブについて読み、それらのパスを構築する興味深い方法について考えました。これが私が思いついたものです。 あなたが知っているかもしれませんが、あなたは、以下からなるすべてのnタプルを取ることによってn次元ハイパーキューブを構築することができます1し、0彼らは一桁が異なる場合に限っ、それらを頂点とし、接続します。これらの2進数を整数として解釈すると、頂点が適切に番号付けされたグラフになります。たとえばn=3: このハイパーキューブを散歩して、頂点から始めたいとしましょう0。次に、どの頂点を次に訪問するかをどのように決定しますか?私が思いついたルールaは、あなたがいる頂点の番号を取り、そのmod(a,n)ビットを反転させ(ゼロベースのインデックス付け)、結果の頂点に移動することです。正式には、このルールは次のように再帰的に定義できます。 a[m+1] = xor(a[m], 2^mod(a[m],n)). このルールに従うことで、常にキューブにとどまり、エッジに沿って移動します。結果のパスは次のようになります ご覧のとおり、円を描くように歩きます!実際、すべての次元で、すべての開始点で、パスはループになります。以下のための例えばn=14とa[0]=0、それは次のようになります 熱心なアンブラーにとって、彼の計画されたルートの長さは非常に重要な情報です。したがって、あなたの仕事は、入力としてハイパーキューブの次元nと開始頂点を取りa[0]、結果のループ内の頂点の数を出力する関数またはプログラムを作成することです。 テストケース n a[0] Output ----------------- 3 0 6 14 0 50 5 6 8 17 3 346 ルール 標準の抜け穴は禁止されています 出力/入力は任意の適切な形式にすることができます a[0]有効な頂点であると想定できます 得点 バイト単位の最短コードが優先されます。 このトピックに関する追加情報がありましたら、お聞かせください。

2
下り坂の迷路ソルバー
下り坂の迷路は、0から9までの一連のスペースで区切られた数字の列と、1つの「S」と1つの「X」として与えられます。ここで、Sは開始を示し、Xは終了を示します。下り坂の迷路では、北、南、東、西(対角線なし)に隣接するスペースにのみ行くことができ、値以下のスペースにのみ行くことができます現在オンです。 プログラムは、迷路をナビゲートするためのパスを入力と同じ形式で出力する必要があります。通過したすべてのスペースにのみ「。」が必要です。それらの中に、そしてすべての訪問されていないスペースにそれらの中に「#」があるはずです。開始セルと終了セルもそれぞれ「S」と「X」を保持する必要があります。迷路には常に解決策があると考えることができます。 入力例: 3 3 3 3 2 1 S 8 9 3 1 1 3 3 0 6 8 7 1 2 2 4 3 2 5 9 7 1 2 1 5 4 3 4 4 6 1 1 X 6 4 4 5 5 5 出力例: . …

2
最大フェンスの配置を数える
バックグラウンド フェンスを作りたいです。そのために、私はたくさんの棒を集めて、それらを地面に貼りました。実際のフェンスを作るためにポールに釘付けにするボードもたくさん集めました。私はものを構築するときに夢中になる傾向があり、おそらくそれを置く場所がなくなるまでボードをポールに釘付けし続けるでしょう。最終的に可能なフェンスを列挙してほしい。 入力 入力は、便利な形式で極の位置を表す2次元整数座標のリストです。重複は含まれていないと想定できますが、その順序については何も想定できません。 ボードは、極の間の直線で表されます。簡単にするために、水平ボードと垂直ボードのみを考慮します。間に2つの極またはボードが存在しない場合、2つの極をボードで結合できます。つまり、ボードを相互に交差させることはできません。ポールとボードの配置は、新しいボードを追加できない場合に最大になります(同等に、水平または垂直に配置された2つのポールの間にポールまたはボードが存在します)。 出力 出力は、極を使用して構築できる最大配置の数です。 例 入力リストを検討する [(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)] 上から見ると、対応する極の配置は次のようになります。 o o o o o o o o これらの極を使用して構築できる3つの最大配置があります。 o o o o-o o|o o-o o----o o||| o o| | o o-o o|o o-o o o o したがって、正しい出力は3です。 ルール 関数または完全なプログラムのいずれかを記述できます。最も低いバイト数が優先され、標準の抜け穴は許可されません。 テストケース [] -> 1 [(0,0),(1,1),(2,2)] -> 1 [(0,0),(1,0),(2,0)] -> …

3
3x3接続コンポーネント
チャレンジ 次のASCIIグラフィックに示すように、3x3キンググリッドについて考えてみます。 A--B--C |\/|\/| |/\|/\| D--E--F |\/|\/| |/\|/\| G--H--I 入力として、ノードのラベルを表す整数の長さ9のリストが与えられます。たとえば、入力[0,1,1,2,1,0,5,5,1]は次のラベルを表します。 0--1--1 |\/|\/| |/\|/\| 2--1--0 |\/|\/| |/\|/\| 5--5--1 出力は、接続されたノードのセットを形成する入力内の整数のセットです。より明示的にはn、ラベル付きのノードのセットnが接続されている場合にのみ、出力に入力からの整数が含まれる必要があります。この例では[1,2,5]、2つ0のが接続されていないため、許容可能な出力はになります。最も低いバイト数が優先されます。 詳細なルール 入力リスト内のノードの固定順序を選択でき、これを回答で述べる必要があります。EFBDHCAGIの順序では、上記のラベルはとして与えられ[1,0,1,2,5,1,0,5,1]ます。 完全なプログラムまたは関数を記述できます。後者の場合、言語がサポートしている場合、出力は整数のセットになる可能性があります。 出力リストには重複が含まれる場合がありますが、その長さは9を超えてはなりません。 標準の抜け穴は許可されていません。 テストケース これらには、グリッドに合わせて1桁の数字があります。それらを選択した順序に調整します。 011 210 => 1 2 5 551 010 202 => 0 2 221 110 123 => 0 2 3 221 111 111 => 1 111 …

3
一方向システムを通る最短ルート
私の出身地であるリルには、一方通行の交通システムがあり、目的地からできるだけ離れるように設計されているようです。あなたがそれを試みることを選択した場合のあなたの仕事は、そのような交通システムを通る最短ルートを与えるプログラムを作成することです。 入力 入力はになりSTDIN、次のように、開始点と終了点のリスト、それに続く空白行、それに続くクエリのリストになります。 A B B A B C C D D C A D C A B A 各道路は指定された方向にしか移動できないため、上記の例では、道路A-Bは双方向の道路ですが、B-CはBからCへの一方通行です。CからBへの移動禁止されています。 始点と終点はすべて1つの大文字で表されます。 出力 出力は、受け取ったクエリごとに、指定された開始点から指定された終了点までの最短ルート(訪問したポイントの数で測定)である必要があります。そのようなルートが存在しない場合は、空白行を出力します。複数の最短ルートが存在する場合は、すべての最短ルートを辞書順にソートするときに最初のルートを出力します。 上記の例の場合、出力は次のようになります。 A B C D B A テストスクリプト 前と同じように、JoeyとVenteroによって書かれたスクリプトに基づいて、このタスクのテストを提供しています:- バッシュ パワーシェル 上記のスクリプトを使用できない人のためのテストと予想される出力 プレーンテキスト 使用法: ./test [your program and its arguments] 報酬 仕様に適合し、すべてのテストに合格したゴルフでの試みが明らかにあったすべての回答は、私の賛成票を獲得します。2012年1月26日までの最も短い有効な回答が受け入れられます。

2
パスを再ルーティングする
方向のグリッドと開始位置と終了位置を指定して、2点間のパスを完了するために必要な方向グリッドの置換の最小数を決定します。グリッドは二重円筒形です。これは、例を挙げればより明確になります。 例 例として次のグリッドを見てみましょう: >>>>v >>>>< <<<<< (座標がまたはで、最初の行と左の列がである)(1, 1)で開始して終了します。次に、1つの可能な解決策は、とをに置き換えることです。これにより、最終的なグリッドは次のようになります。(1, 3)(x, y)(col, row)1(1, 1)(1, 2)v v>>>v v>>>< <<<<< から始まり(1, 1)、パスはにつながり(1, 3)ます。しかし、短いソリューションを交換することである、存在する(5, 2)とv、最終的なグリッドはこれです: >>>>v >>>>v <<<<< から始めて(1, 1)、かなり長いパスがにつながり(1, 3)ます。 一番上の行の何かを^作品でも置き換えます(@Spitemasterに感謝します)。 入力 入力は、4つの可能な値の長方形グリッドと2つの座標で構成されます。グリッドは適切な形式で使用できます。たとえば、文字または整数の行列、文字列リストなど。グリッドの次元を要求することもできます。座標は適切な形式で取得できます。たとえば、整数ペア、複素数などです。0または1のインデックスを選択できます。 出力 出力は単一の整数であり、パスを最初から最後まで閉じるのに必要なグリッド置換の最小数である必要があります。 ルールと仕様 標準抜け穴が適用されます グリッドは二重円筒形です。つまり、上から上に移動すると下に移動し、左から左に移動すると右に移動します。 サンプルケース サンプルケースは、文字行列と1インデックスの座標として与えられます。 事例1 入力 >>>>v >>>>< <<<<< 1 1 1 3 出力 1 説明 例を参照してください。 事例2 …

12
折れ線グラフ/共役グラフを作成する
前書き 無向グラフGが与えられると、Gのエッジ間の接続を表すグラフL(G)(線グラフまたは共役グラフと呼ばれます)を構築できます。これは、 Gおよびそれらが表すエッジに共通の頂点がある場合、これらの頂点を接続します。 これは、折れ線グラフ(緑)の作成を示すWikipediaの例です。 別の例として、頂点A、B、C、およびDを持つこのグラフGを取り上げます。 A | | B---C---D---E Gの各エッジに新しい頂点を作成します。この場合、AとCの間のエッジはACと呼ばれる新しい頂点で表されます。 AC BC CD DE また、頂点が表すエッジに共通の頂点がある場合は、頂点を接続します。この場合、AからCへのエッジとBからCへのエッジは頂点Cが共通なので、頂点ACとBCが接続されます。 AC / \ BC--CD--DE この新しいグラフは、Gの折れ線グラフです。 詳細については、Wikipediaを参照してください。 チャレンジ グラフGの隣接リストが与えられた場合、プログラムは線グラフL(G)の隣接リストを出力または返す必要があります。これはコードゴルフなので、バイト数が最も少ない答えが勝ちます! 入力 Gのエッジを表す文字列のペアのリスト。各ペアは、そのエッジによって接続されている頂点を示します。 各ペア(X、Y)は一意であることが保証されています。つまり、リストには(Y、X)または2番目の(X、Y)は含まれません。 例えば: [("1","2"),("1","3"),("1","4"),("2","5"),("3","4"),("4","5")] [("D","E"),("C","D"),("B","C"),("A","C")] 出力 L(G)のエッジを表す文字列のペアのリスト。各ペアは、そのエッジによって接続されている頂点を表します。 各ペア(X、Y)は一意である必要があります。つまり、リストには(Y、X)または2番目の(X、Y)は含まれません。 Gのエッジ(X、Y)の場合、L(G)で作成される頂点の名前はXYにする必要があります(名前は、入力で指定されたのと同じ順序で連結されます)。 例えば: [("12","13"),("12","14"),("12","25"),("13","14"),("13","34"),("14","34"),("14","45"),("25","45"),("34","45")] [("DE","CD"),("CD","CB"),("CD","CA"),("BC","AB")] テストケース [] -> [] [("0","1")] -> [] [("0","1"),("1","2")] -> [("01","12")] [("a","b"),("b","c"),("c","a")] -> [("ab","bc"),("bc","ca"),("ca","ab")] [("1","2"),("1","3"),("1","4"),("2","5"),("3","4"),("4","5")] …

2
私のグラフは優雅ですか?
A 優雅なグラフの種類であるシンプルなグラフ。優雅なグラフは特別です。すべてのノードに正の整数でラベルを付ける方法があるため、エッジが接続するノードの違いでエッジにもラベルが付けられる場合、2つのエッジが同じラベルを持たず、すべてのラベルはエッジの数まであります。使用されている。 ワークアウトの例 これは、グレースフルグラフと思われる単純なグラフです。 次のラベルを試してみましょう。 ノードのラベル付けで整数をスキップすることが許可されていることに注意してください。次に、すべてのエッジに、接続するノード間の正の差でラベルを付けます。見やすくするために、これらを赤でラベル付けしました。 各エッジには一意の番号があり、1〜7(エッジの数)の数字は省略されません。したがって、私たちのグラフは優雅です。 仕事 適切な入力方法でグラフが与えられた場合、それが適切な場合は真の値を出力し、それ以外の場合は偽の値を出力します。 これはコードゴルフなので、目的はバイト数を最小限に抑えることです。 テストケース ここでは、グラフはエッジの配列として表されます。 3 nodes: [(0,1),(0,2),(1,2)] True Labeling: Node 0 -> 0 Node 1 -> 2 Node 2 -> 3 5 nodes: [(0,1),(0,4),(1,2),(2,3),(3,4)] False 5 nodes: [(0,1),(1,2),(2,3),(3,4)] True Labeling: Node 0 -> 0 Node 1 -> 1 Node 2 -> 3 …

1
拡張可能な列車交換問題
拡張列車交換問題 パート1:通常の列車交換問題 1996年のCCC(カナダコンピューティングコンペティション)では、最初のステージ2の問題は列車交換問題でした。ここのリンクにアクセスできます。基本的に、番号付きの列車の束があり、それらを順番に取得するために必要な列車の入れ替えの数を調べたい場合、各列車の入れ替え操作では、隣接する2つの列車を入れ替えることができます。車両はどちらの方向にも走ることができるので、入れ替えたときに車両が反対方向に向いていることを誰も気にしません。これはとても簡単です。あなたがする必要があるのは: それをバブルソートするためのステップ数を見つけます。隣接する要素の交換のみを行うことができる場合、これは最も効率的なソートアルゴリズムです。 だから、もっと難しいものを作りました。 パート2:この課題の仕組み 基本的に、隣接する列車だけでなく、交換することができます。回転プラットフォームが長いと、複数の列車の位置を入れ替えることができます。たとえば、長さが4の回転プラットフォームでは、内側と外側のペアを同時に交換できるため、に1 2 3 4なり4 3 2 1ます。さまざまな回転プラットフォームサイズの例を以下に示します。 Length 2: 1 2 3 4 5 --- 1 3 2 4 5 Length 3: 1 2 3 4 5 ----- 1 4 3 2 5 Length 4: 1 2 3 4 5 ------- 4 3 2 …

2
ブラックポーンの復讐
目的 黒のポーンは復讐を望んでいます。最後の攻撃をプロットします。 ルール 黒いポーン(L)は一番上の行から始まり、一番下の行に移動します。取得したポイントを最大化し、でパスを示しますX。ポーン(P)は1、ビショップ(B)とナイト(N)3、ルーク(R)5、クイーン(Q)9です。入力にはキングはありません。 ポイントの数が最大のパスが複数ある場合は、それらのパスのいずれかを出力します。ポーンが最下列に到達できない状況はありません。 例 入力: ----L--- -----P-- ------P- --R--P-Q ----P-P- ---P-P-P --P-N--- -P------ 出力: ----L--- -----X-- ------X- --R--P-X ----P-X- ---P-X-P --P-X--- -P--X--- 入力: --L----- -P------ P------- -P------ P--Q---- -P------ P------- -P------ 出力: --L----- -PX----- P-X----- -PX----- P--X---- -P-X---- P--X---- -P-X----

5
合計注文の存在を決定する
このタスクでは、次のような正の整数の配列を検討します。 3 18 321 17 4 4 51 1 293 17 入力は、両方の任意の、おそらく異なる、正の長さのそのような配列のペアで構成されます。全順序≤かどうかを判断X ⊂ N × N、Nは正の整数の集合であるが、両方の入力配列が≤に対して順になるように存在するX。(A≤という通知X B∧B≤ X A)↔A = Bが成立しなければならないが、その2つの数は≤下に等しいと見なされているX場合、それらは同じ数である場合にのみ。 たとえば、入力が配列のペアである場合 7 2 1 1 4 12 3 9 8 7 2 5 1 あなたは全順序が≤どうかを把握することになっているXは、このような存在します 7≤ X 2≤ X 1≤ X 1≤ X 4≤ X 12≤ X 3 そして …

1
グラップリングフックで木々の間をスイング
森の中の小道を見つけたので、森に沿って旅行する予定です。しかし、あなたが旅を始める直前に、地面は溶岩に変わります。 あなたはなんとか最も近い木を急いでなんとかします(どうしても木は燃えませんでした)。答えは、プログラミングの課題にぴったりだと思います。魔法のグラップリングフック(先にカヌーで作ったもの)を使って、木や枝を振り回すことができます。 ただし、そこにたどり着くためにどの木や枝を振り回す必要があるかはわかりません。幸い、あなたにはプログラミングのスキルがあるので、腕にプログラムを描き、どの木にスイングするかを教えることにしました。ただし、腕には表面積があまりないため、プログラムをできるだけ小さくする必要があります。 nby m配列を使用してフォレストを表すことができます。次の文字が配列を構成します。 T:木。ここに着陸できます。これにはグラップリングフックを使用できません。あなたはこれを通り抜けることができます。 P:と同じように機能しTます。ここから始めます。 Q:と同じように機能しTます。これが目標です。 +:ブランチ。ここに着陸することはできません。これでグラップリングフックを使用できます。あなたはこれを通り抜けることができます。 *:人食いクモ。ここに着陸すると死ぬ。これでグラップリングフックを使うと死ぬ。これを振り回すと死にます。 -:通常の地面、言い換えれば溶岩。ここに着陸することはできません。これにはグラップリングフックを使用できません。あなたはこれを通り抜けることができます。指定された配列の外側のすべての領域がこのタイプです。 以下は、森がどのように見えるかの例です。 y ----T---+------12 ---------------11 ----T---+---T--10 ---------------9 T-+-T-+-T------8 ---------------7 ------------+--6 ----+----------5 +-------+------4 ---------------3 ----P---+-*-Q--2 ---------------1 T-+-T-+-T------0 012345678911111 x 01234 (x,y)座標軸に示されているように、座標をと表記します。 あなたはから始めてP、あなたの方法を作らなければなりませんQ。これを行うには、ブランチを使用Tしてツリーからツリーにスイングします。グラップリングフックは、直交するブランチ(つまり、現在のx位置またはy位置と同じブランチ)に取り付けることができます。たとえば、サンプルのフォレストの位置にいる場合は、グラップリングフックを、、またはの位置に取り付けることができます。あなたと枝の間に木や他の枝があったとしてもこれを付けることができます。T+(4,8)(2,8)(6,8)(4,5) グラップリングフックを枝に取り付けたら、最初の位置と枝の間の距離の2倍に等しい距離を枝の方向に移動します。言い換えると、最終位置は、ブランチから開始位置と同じ距離で、ちょうど反対側になります。運動がどのように機能するかについてのより正式な定義は以下のとおりです。の添え字vは、最終位置、u初期位置、およびb分岐の位置です。 (xv、yv)= (2 xb− xあなた、2 Yb− yあなた)(バツv、yv)=(2バツb−バツあなた、2yb−yあなた)(x_v, y_v) = (2x_b-x_u, 2y_b-y_u) 最初の位置と最後の位置の間にクモがいる場合は、そこに移動できないことに注意してください。たとえば、サンプルフォレストでは、からスパイダーにぶつかるため、から(4,2)へのスイング(12,2)はできません(10,2)。 目標は、このスウィングスルーブランチ法を使用して、可能な限り少ないスイングでポイントPからポイントに移動することです。たとえば、フォレストの例では、最短パスは次のとおりです。Q 以下から(4,2)の(4,8)使用(4,5) 以下から(4,8)の(0,8)使用(2,8) 以下から(0,8)の(0,0)使用(0,4) 以下から(0,0)の(4,0)使用(2,0) 以下から(4,0)の(4,10)使用(4,5) 以下から(4,10)の(12,10)使用(8,10) …

7
有向グラフの最終サイクルを数える
仕事 単純な有向グラフの最終サイクル数を正確にカウントするプログラムまたは関数を、選択した言語で作成する必要があります。 この特定の種類の有向グラフは、n個の整数の配列として表され、それぞれが1からn(または言語が0から数える場合は0からn-1)の間で独立して選択されたランダムな値を持ちます。グラフは、1つのインデックス(ノード)から、開始インデックスで見つかった値と一致するインデックスを指す矢印と考えることができます。 関数は、最大n = 1024またはそれより小さい整数サイズの大きなグラフを受け入れることができる必要があります。 例 n = 10について次のグラフを考えてみます。 [9, 7, 8, 10, 2, 6, 3, 10, 6, 8] インデックス1には9が含まれているため、インデックス1からインデックス9への矢印があります。インデックス9には6が含まれているため、矢印9-> 6があります。インデックス6には6が含まれています。 インデックス2には7が含まれます。インデックス7には3が含まれます。インデックス3には8が含まれます。インデックス8には10が含まれます。インデックス10には8が含まれるため、2番目のターミナルサイクルになります(8-> 10-> 8-> 10など)。 )。 インデックス4->10。2番目のターミナルサイクルに入ります。同様に、インデックス5-> 2-> 7-> 3->8。これも2番目のターミナルサイクルの一部です。 この時点で、すべてのインデックス(ノード)がチェックされ、すべてのパスが追跡され、2つの固有のターミナルサイクルが識別されています。したがって、この有向グラフの最終サイクルの数であるため、関数は2を返す必要があります。 得点 最小のコードを目指しますが、ターミナルサイクルが正しくカウントされることを確認してください。1週間の勝利後の最短コード。 テストケース コードの正しさを確認するためのテストケースをいくつか示します。言語が0から始まる配列インデックスをカウントする場合は、範囲外のインデックスを防ぐために、各配列要素の値から1を差し引く必要があります。 n = 32、5サイクル: [8, 28, 14, 8, 2, 1, 13, 15, 30, 17, 9, …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.