1

私は大学生です。これは、アルゴリズム分析の教授がクラスに渡した宿題です。非推奨となるため宿題タグは使用していませんが、基本的には宿題です。どんな助けでも大歓迎です。

標準のxmlを読み取り、<graphml...>それをプログラム画面にプロットする任意の言語を使用してプログラムを作成し、BFSアルゴリズムを使用して、グラフに含まれるノード、エッジ、および接続されたコンポーネントの数を示します。

私はすでにgraphsharpのc#グラフレイアウトライブラリを使用してこのプログラムを作成しました。これには、読み取り済みのxmlにグラフをプロットするという利点がありますが、ボタンをクリックするだけでアイテムをカウントして操作を行うことができます。

私はすでにこのプロット+カウント部分を終了しました。問題は、このgraphsharpプロジェクトにはほとんどドキュメントがないことであり、BFSがグラフを通過する順序を示す必要がありました。BFSの実行中にノードのラベル名を次のように変更するので、非常に単純なものを作成しました。

  • 「n0」は「n0-1」になります
  • 「n1」は「n1-2」になります
  • すぐ...

私が得た問題はこれです:

Property or indexer 'QuickGraph.IVertexSet<object>.Vertices'
cannot be assigned to -- it is read only

頂点は「作成可能」であり、編集可能ではありませんか?

4

2 に答える 2

1

プロパティを持つカスタム頂点クラスを作成しますName。また、新しい頂点を作成する代わりに(graph.vertices [i] = "newstr"は、i番目のオブジェクトを完全に新しいオブジェクト/文字列に変更することを意味するためName)、既存の頂点のコンテンツ(定義済みプロパティ)を変更します。

カスタム頂点タイプを使用する場合は、頂点を期待どおりにレンダリングできるようにカスタムDataTemplateを定義する必要があります。

于 2012-10-22T22:32:59.997 に答える
0

このコンポーネントが Edge 部分で読み取り専用になった理由がわかる気がします。これらのグラフィックスがレンダリングされる方法に関係している可能性があります。Edge を削除してグラフに追加し直す別のサンプル コードを下に作成しました (これで目標はある程度達成されますが、どちらも望ましくない可能性があります (Graph で Edge を変更する方法は他にないようです)。 )))。

実際にグラフを描画する前に、ツリーをレイアウトする必要があるようです (これは、コンポーネントの意図でもあると思います)。あなたがそれを成し遂げることができるかどうか私に知らせてください。

    string edgeSource = "n3";
    string edgeTarget = "n4";
    string newEdgeSource = "n0";
    string newEdgeTarget = "n4";

    IEnumerator<IEdge<object>> edgeEnumeratoer = g.Edges.GetEnumerator();
    edgeEnumeratoer.MoveNext();
    while (edgeEnumeratoer.Current != null)
    {
        var edge = edgeEnumeratoer.Current;
        string source = (string)(edge.Source);
        string target = (string)(edge.Target);
        if ((source.CompareTo(edgeSource) == 0) && (target.CompareTo(edgeTarget) == 0))
        {
            if (g.RemoveEdge(edge))
            {
                IEdge<object> newEdge = new Edge<object>(newEdgeSource, newEdgeTarget);
                g.AddEdge(newEdge);
                break;
            }
            else
            {
                Debug.WriteLine("Could not remove edge from graph.");
            }
        }
        edgeEnumeratoer.MoveNext();
    }

    graphLayout.Graph = g;
于 2012-10-22T15:44:52.353 に答える