SSpanSorbus
AIコーディングワークスペース

無向グラフの橋辺

最大32頂点の単純無向グラフから橋を求めます。

● ● ●SpanSorbus●
ワークフロー · 無向グラフの橋辺 ×
def bridge_edges(n, edges):
    if type(n) is not int or not 0 <= n <= 32:
        raise ValueError("vertex count")
    if type(edges) is not list or len(edges) > 496:
        raise ValueError("edge count")
    graph = [set() for _ in range(n)]
    for edge in edges:
        if type(edge) is not tuple or len(edge) != 2 or any(
            type(x) is not int or not 0 <= x < n for x in edge):
            raise ValueError("edge endpoints")
        a, b = edge
        if a == b or b in graph[a]:
            raise ValueError("simple undirected edges")
        graph[a].add(b); graph[b].add(a)
    timer, found = 0, []
    entered, low = [-1] * n, [0] * n
    def visit(v, parent):
        nonlocal timer
        entered[v] = low[v] = timer; timer += 1
        for u in sorted(graph[v]):
            if u == parent:
                continue
            if entered[u] < 0:
                visit(u, v); low[v] = min(low[v], low[u])
                if low[u] > entered[v]:
                    found.append(tuple(sorted((v, u))))
            else:
                low[v] = min(low[v], entered[u])
    for v in range(n):
        if entered[v] < 0:
            visit(v, -1)
    return sorted(found)
✳最大32頂点の単純無向グラフから橋を求めます。
✓ 変更内容適用前に確認 ↗
ワークスペースのイメージ
01

適用前に確認

実際の動作を期待する結果と比較します。検証に失敗した場合は、次の変更を加える前に原因を調べてください。

02

モデル

OpenAI互換またはAnthropicのエンドポイントを、ベースURLと必要なAPIキーで設定し、接続をテストします。ローカルのモデルサーバーは起動が必要です。リモートツールは別途データを送信する場合があります。

03

プロジェクト

非連結成分と閉路を確認し、入力を変えず重複辺・自己ループ・無効な端点を拒否します。

ワークフロー

無向グラフの橋辺

ワークフロー ↗
ワークフロー
def bridge_edges(n, edges):
    if type(n) is not int or not 0 <= n <= 32:
        raise ValueError("vertex count")
    if type(edges) is not list or len(edges) > 496:
        raise ValueError("edge count")
    graph = [set() for _ in range(n)]
    for edge in edges:
        if type(edge) is not tuple or len(edge) != 2 or any(
            type(x) is not int or not 0 <= x < n for x in edge):
            raise ValueError("edge endpoints")
        a, b = edge
        if a == b or b in graph[a]:
            raise ValueError("simple undirected edges")
        graph[a].add(b); graph[b].add(a)
    timer, found = 0, []
    entered, low = [-1] * n, [0] * n
    def visit(v, parent):
        nonlocal timer
        entered[v] = low[v] = timer; timer += 1
        for u in sorted(graph[v]):
            if u == parent:
                continue
            if entered[u] < 0:
                visit(u, v); low[v] = min(low[v], low[u])
                if low[u] > entered[v]:
                    found.append(tuple(sorted((v, u))))
            else:
                low[v] = min(low[v], entered[u])
    for v in range(n):
        if entered[v] < 0:
            visit(v, -1)
    return sorted(found)
AIコーディングワークスペース

グラフの結果をアプリケーションの判断につなげる

SpanSorbusは、実際のソースファイルの文脈で連結性のロジックを調べるWindows向けコーディングワークスペースです。グラフの結果からアプリケーションが行う判断をまず説明します。探索や出力の変更を求める前に、入力表現と利用側を調べるよう接続先モデルに依頼してください。

bridge_edges.pyを使い、削除するとテスト用グラフの連結部分が分かれる辺を調べることが有用な課題になります。比較として閉路を持つグラフを含め、期待する辺リストを示します。単純な無向グラフという前提を実装とともにレビューし、変更案が異なる種類の入力を黙って受け付けないようにしてください。

ルーチンが値を返した後も作業は続きます。呼び出し側のノードの命名、辺の表示、拒否データの処理を調べ、非連結と空のテストデータでチェックを実行します。観測可能な結果にレビューを結び付けてください。グラフの説明が正しくても、実際のデータを期待する表現にアプリケーションが対応付ける証明にはなりません。

SpanSorbusは対応するOpenAI互換またはAnthropicのエンドポイントに、必要に応じて認証情報を使って接続します。接続先が提供すれば無検閲AIモデルを選べますが、プロバイダーの制限と利用可能なツールを確認してください。コンテキストの上限はモデルとサーバーに依存するため、範囲を限定したテストデータと関連する利用側を示して対話の焦点を保ちます。

連結性コードを変更する前の質問

閉路外のすべての辺を同じように扱うべきですか?

正確なグラフの定義とアプリケーションの判断を確認してください。期待結果を独立に記したテストデータを使います。非形式的なグラフの説明を要件にする前に、方向、多重辺、自己ループに関するコードの前提をレビューします。

非連結入力をテストするのはなぜですか?

アプリケーションには別々の連結成分が複数あり、それぞれに対象となる辺がある場合があります。1ノードから始める探索は他を見落とし得ます。複数成分のテストデータを含め、最初の期待辺だけでなく出力全体を比較してください。

取り込んだデータの重複辺を渡せますか?

まず受け入れ入力の契約を調べます。例は単純グラフを想定し、重複を拒否します。取り込んだデータに重複辺がある場合、グラフルーチンの変更を求める前に、取り込み側で正規化するかエラーを報告するか決めてください。

辺を表示する利用側は何を保つべきですか?

内部ノード識別子と利用者向けラベルの対応、安定出力に必要な順序を定義します。変更案とともに対応をレビューしてください。内部の辺の組が正しくても、誤ったラベルと結び付けると誤解を招く結果になります。

Windows版をダウンロード ↗

SpanSorbus · 更新日 2026-10-25