問題タブ [edges]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1348 参照

c - igraph 最短パスに沿ってエッジ ID を取得する方法

複数の最短パスを持つグラフがあり、頂点の ID とエッジの ID を取得したい:

igraph_get_all_shortest_paths(...)頂点のリストのみを計算します。

ではない

それをすることになっていますか?

私が実行すると:

次のエラーが表示されます: igraph_vector_clear: Assertion `v != ((void *)0)' failed

0 投票する
1 に答える
290 参照

java - Prefuse API Java によるエッジの作成

私は最近 prefuse を使用していくつかの視覚化を行っています。私がしていることは、データベースからいくつかの情報をロードし、それらの prefuse テーブル インスタンスを作成し、その情報に基づいてグラフを作成することです。これはうまくいきます。

私の質問は、そのグラフのエッジを作成するにはどうすればよいですか??

エッジを保持するために別のテーブルを作成する必要があると思いますが、その作成方法がわかりません...どんな助けにも感謝します! ありがとうございました!

これは、グラフのデータを設定するための私のコードです。

0 投票する
1 に答える
2976 参照

c++ - グラフからエッジを削除する

Boostグラフライブラリを使用して生成されたグラフからいくつかのエッジを削除したいと思います。

以下に示すように、 Boostを使用boost::mt19937して1からN(頂点の数)までの乱数を生成し、ランダムなエッジを追加します。

しかし、次のように4つの頂点がある場合、上記の出力が得られます。

しかし、ご覧のとおり、エッジ(0,2) and (3,2)が繰り返されています。そして、より大きなグラフの場合、時にはex:(1,3) and (3,1)が存在し、それらは両方とも無向グラフと同じです。これらの頂点を削除するにはどうすればよいですか。Boostにはと呼ばれるものがあることは知ってremove_edge_if()いますが、私のケースをサポートする正確な例は見つかりませんでした。

0 投票する
1 に答える
1871 参照

loops - プロローググラフはループなしでパスを見つけ、エッジをチェックします

Prolog でグラフ内のパスを見つけようとしています。オンラインで見つけたスニペットを使用して、これを機能させることができました。ただし、同じエッジに 2 回アクセスしないようにする必要がある一方で、2 回アクセスしないようにノードを追跡します。これはおそらくほとんどのグラフで同じことになりますが、エッジ上のポイントからエッジ上の他のポイントへのパスを計算するために使用したいので、ポイントから隣接するノードへのパスを返してはなりません。反対側のノード (たとえば、ノード A からノード C へのエッジ AC があり、点 B が中間にある場合、ACB は AC を 2 回移動するため、受け入れられるパスではありません)。

これが私の現在のコードです:

上記の例では、たとえば次のように返されます。

これで、同じエッジがパスに 2 回入らないようにするために\+ memberchk(X,[Y|P1])を単純に置き換えることができると考えました。これで問題は解決します。\+ memberchk(Edge,S)しかし、私がそうすると、Prologはパスがないと言っています。

誰かがこれがどこで間違っているのか説明できますか?

0 投票する
1 に答える
3286 参照

java - 値で頂点を彩るユング

現在、Java ライブラリの Jung に行き詰まっています。

頂点とエッジを表示しますが、マウスではなく頂点の値で必要な頂点カラーリングの関数が見つかりません。

私のレンダリング: 頂点と辺

0 投票する
3 に答える
6402 参照

r - R igraph 平行エッジをウェイト アトリビュートに変換

R の igraph を使用しています。私のグラフは、並列エッジ (同じソースとターゲットを持つ複数のエッジ) を含むエッジリストに基づいています。これらの平行なエッジをエッジ属性の重みに変換したいと思います。これを行う簡単な方法はありますか?

簡単な方法がない場合。これらの平行なエッジを特定するにはどうすればよいですか?

単一の重複を返しません。重複したエッジIDを探していると思います。

0 投票する
2 に答える
2862 参照

algorithm - 接続されたノードのリストからグラフを描く

システムでは、通常のグラフのように接続されているノードのリストがあります。私たちはシステム全体とそれらのすべての接続を知っており、開始点も持っています。すべてのエッジには方向があります。

ここで、これらすべてのノードとエッジを自動的に描画したいと考えています。問題は実際の描画ではなく、(x,y) 座標の計算です。基本的には、見栄えがするようにこのグラフ全体を描きたいと思います。

私のデータ構造は次のようになります。

この問題にはよく知られたアルゴリズムがいくつかあるはずですか? 何も見つかりませんでしたが、間違ったキーワードを使用している可能性があります。

私の考え:

1 つの方法は、開始ノードを (0,0) に配置し、「距離」という定数を設定することです。次に、隣接するノードごとに距離を y 位置に追加し、隣接するノードごとに x= 距離 * n を設定します。

しかし、これは実際には多くの問題を引き起こします。

0 投票する
1 に答える
5179 参照

prolog - エッジのリストを返す Prolog で Dijkstra のアルゴリズムを実装する方法は?

私はしばらくの間、JIProlog にダイクストラ最短パス アルゴリズムを実装しようとしてきました。herehereなど、オンラインで利用できる実装がいくつかありますが、それらはすべてノードのリストとしてパスを返します。技術的には頂点を複数のエッジで接続できるマルチグラフを使用しているため、これは私の実装には問題があります。したがって、ノードのリストではなくエッジのリストを返すアルゴリズムが必要です。

最初に言及した実装をエッジを追跡するように調整しようとしましたが、dijkstra_l/3ルールに迷ってしまいました。誰かが私を助けることができますか?ありがとう!

0 投票する
1 に答える
2159 参照

java - 制御フローグラフの描画

私の仕事は、制御フローグラフを作成することです。まず、コードを基本ブロックに分割することができました。たとえば、このプログラムは次のとおりです。

次の基本ブロックに変わります。

ブロック1

ブロック2

ブロック3

ブロック4

ブロック5

ブロック6

ブロック7

ブロック8

ブロック9

これを行うには、ファイルをスキャンし、PatternとMatcherを使用して、if、whileなどのステートメントに基づいてプログラムを分割します。基本ブロックはArrayListであり、これらのブロックはすべてArrayList>に保持されます。

次に、基本ブロックが相互に接続されているHashMapを保持しました。たとえば、ブロック1はifステートメントであるためブロック2とブロック3に接続されます(これが一方の方向に進む場合は、もう一方の方向に進みます)。このHashMapは、ブロック番号、および接続されているブロック番号のリスト用の>です。

つまり、基本ブロックと、これらの基本ブロック間の接続のリストがあります。今の私の問題は、これをグラフィカルな形式で表示する方法がわからないことです。以前は、paint()メソッドを使用して円と線を描画し、各ブロックが次のブロックへの接続を1つだけ持つ単純な制御グラフを表現していました。ただし、複数の接続がある場合にこれを行う方法がわかりません。これを行う簡単な方法はありますか?

ありがとう!

0 投票する
0 に答える
594 参照

graph - グラフ: 共通エッジによるグループ化/クラスタリングのアルゴリズム

まず最初に、私の英語が少しずれていたらごめんなさい (それは私の母国語ではありません)。自分を理解してもらえるように頑張ります。

修士論文の視覚化プロジェクトを作成していますが、アルゴリズムの問​​題が発生しました。ビジュアライゼーションは、私がアーティファクト (グラフのノード) と呼んでいるものと、私がキーワード (エッジ) と呼んでいるものの間の接続を表すグラフで構成されています。これらのアーティファクトは、さまざまなものになる可能性があります。たとえば、それらは写真を表すことができ、エッジは写真間のタグを表します。説明のために、写真 A がタグ 1 によって写真 B に接続されているとします。これは、写真 A と写真 B の両方にタグ 1 があることを意味します。

今、私はこのように機能する拡張と呼ばれる操作を持っています:

ユーザーがノード (私の例では写真) をダブルクリックすると、プログラムはそのノードへの新しい接続ごとにデータベースにクエリを実行します。上の例で、ユーザーが写真 B をダブルクリックすると、拡張により、たとえば、それぞれタグ 2 と 3 を持つ写真 C と写真 D が生成されます。問題は、これにより大量のデータが生成される可能性があり、ノードをグループ化するという解決策が必要になることです。理想は、可能な限り多くの共通キーワード (エッジ) でグループ化することです。たとえば、写真 C と D の両方にタグ 5 が付いていると想像してください。エッジ 5 を持つ C と D のグループがあるとします。しかし、写真 D と E の両方にタグ 5 と 6 がある場合、グループはエッジ付きの D と E になります。 5 と 6、次にエッジ 5 の写真 C (エッジは繰り返すことができます)。説明する:

私の問題は、このアルゴリズムを完成させることです。データベースには、次のテーブルがあります。

キーワード (keyword_id、other_attributes)

アーティファクト ( artefact_id 、other_attributes)

Keyword_Artefact (keyword_id、artefact_id)

Keyword_Artefact_Artefact (keyword_id、artefact_id1、artefact_id2)

この問題に対する最善のアプローチは何でしょうか? かなりの量のデータで実行できるもの。

prefuse ライブラリを使用して、Java でこのプログラムを開発しています。