ノードを表すために、1次元配列でそれらを表すことができることを知っています。ただし、ノード間の関係については、1次元配列でそれらを単純に表すことはできません。それらを2次元配列、つまりマトリックス形成表現法で表すことができます。
Aはこの2次元配列であり、Aの要素AIJがノードVIとノードVJの関係を反映するだけでなく、AIJの値も重量のサイズを表すことができると仮定します。
隣接するマトリックスモデルクラス
隣接マトリックスモデルクラスのクラス名はamwgraph.javaです。このクラスを介して隣接マトリックスで表されるグラフを作成し、挿入ノードを提供し、エッジを挿入し、最初の隣接ノードと特定のノードの次の隣接ノードを取得できます。
java.util.arraylistをインポートします。
java.util.linkedListをインポートします。
パブリッククラスamwgraph {
Private ArrayList VertexList;
//ストレージポイントのリンクテーブル
プライベートint [] []エッジ;
//エッジを保存するために使用されるマトリックスアドレス
プライベートイントナフェッジ;
//エッジ数
Public Amwgraph(int n){
//マトリックス、1次元配列、およびエッジの数を初期化します
edges = new int [n] [n];
vertexlist = new ArrayList(n);
numofedges = 0;
}
//ノードの数を取得します
public int getnumofvertex(){
return vertexlist.size();
}
//エッジの数を取得します
public int getnumofedges(){
numofedgesを返します。
}
//ノードiのデータを返します
public Object getValueByIndex(int i){
return vertexlist.get(i);
}
// V1とV2の重量を返します
public int getweight(int v1、int v2){
returnエッジ[v1] [v2];
}
//ノードを挿入します
public void insertvertex(object Vertex){
vertexlist.add(vertexlist.size()、vertex);
}
//ノードを挿入します
public void insertedge(int v1、int v2、int weight){
エッジ[V1] [V2] =重量;
numofedges ++;
}
//ノードを削除します
public void deleteedge(int v1、int v2){
エッジ[V1] [V2] = 0;
numofedges--;
}
//最初の隣接するノードの添え字を取得します
public int getFirstneighbor(int index){
for(int j = 0; j <vertexlist.size(); j ++){
if(edges [index] [j]> 0){
j;
}
}
return -1;
}
//前の隣接ノードの添え字に基づいて次の隣接ノードを取得します
public int getnextneighbor(int v1、int v2){
for(int j = v2+1; j <vertexlist.size(); j ++){
if(edges [v1] [j]> 0){
j;
}
}
return -1;
}
}隣接するマトリックスを実装して密なグラフを表すコードを見てみましょう。
パッケージcom.dataStructure.graph;
/////密なグラフ - 隣接するマトリックスを使用して表現します
//パブリッククラスDenseGraph {
//
// private int n; //ノードの数
// private int m; //エッジ番号
// private boolean指示; //それは指示されたグラフですか
// private boolean [] [] g; //画像の特定のデータ
//
// //コンストラクター
// public densegraph(int n、boolean dorected){
// assert n> = 0;
// this.n = n;
// this.m = 0; //初期化にはエッジがありません
// this.directed = directed;
// // gは、n*nのブールマトリックスに初期化されます。各g [i] [j]はfalseであり、エッジがないことを示します。
// // falseはブールタイプ変数のデフォルト値です
// g = new boolean [n] [n];
//}
//
// public int v(){
// nを返します;
//} //ノードの数を返します
//
// public int e(){
// mを返します。
//} //エッジの数を返します
//
// //グラフにエッジを追加します
// public void addegge(int v、int w){
//
// assert v> = 0 && v <n;
// assert w> = 0 && w <n;
//
// if(hasedge(v、w))
// 戻る;
//
// // vとwを接続します
// g [v] [w] = true;
// if(!directed)
// g [w] [v] = true;
//
// //エッジの数++
// M ++;
//}
//
// //グラフにVからWからWへのエッジがあるかどうかを確認します
// boolean hasedge(int v、int w){
// assert v> = 0 && v <n;
// assert w> = 0 && w <n;
// g [v] [w]を返します。
//}
//
// //グラフの頂点のすべての隣人を返します
// // Javaは参照メカニズムを使用するため、ベクトルを返すことは追加のオーバーヘッドをもたらさない。
// public Iterable <integer> adj(int v){
// assert v> = 0 && v <n;
// vector <integer> adjv = new Vector <Integer>();
//(int i = 0; i <n; i ++)
// if(g [v] [i])
// adjv.add(i);
// adjvを返します。
//}
//}
java.util.arraylistをインポートします。
java.util.listをインポートします。
//隣接するマトリックスを使用して、高密度のグラフを表します
パブリッククラスのdensegraph {
private int n;
//図のノードの数
Private int m;
//写真内のエッジ数
プライベートブール[] [] g;
//隣接するマトリックスg
プライベートブール監督;
//それは指示されたグラフですか
public densegraph(int n、boolean dorected){
this.n = n;
//初期化グラフのノードの数
this.m = 0;
//図のエッジ数は0に初期化されます
this.directed = directed;
g = new boolean [n] [n];
//隣接するマトリックスGは、n*nの2次元マトリックスに初期化されます
//インデックスはグラフ内のノードを表し、gに保存されている値はノードにエッジがあるかどうかです
}
//グラフ内のエッジの数を返します
public int e(){
mを返します。
}
//グラフ内のノードの数を返します
public int v(){
n;
}
//図に指定された2つのノードの間にエッジを追加する
public void addegge(int v、int w){
if(!hasedge(v、w)){
// connect [v] [w]
g [v] [w] = true;
//無向グラフ
if(!directed)
g [w] [v] = true;
//画像の側面の数+1
M ++;
}
}
// 2つのノードの間にエッジがあるかどうかを判断します
プライベートブールハッシュエッジ(int V、int w){
g [v] [w]を返します。
}
//すべてのノードの隣接ノードを返しますv
public Iterable <integer> adjacentnode(int v){
// adjacentlは、vの隣接するノードを保存するために使用されます
list <integer> adjacentl = new ArrayList <>();
// vに隣接するすべてのノードを見つけて、それらを隣接するに追加します
for(int i = 0; i <n; i ++){
if(g [v] [i])
dedacentl.add(i);
}
隣接を返します。
}
}
要約します
上記は、隣接マトリックスの密なグラフ表現のコード例を実装するためのJavaプログラミングに関するこの記事のすべての内容であり、すべての人に役立つことを願っています。興味のある友達は引き続きこのサイトを参照できます:
基本概念の分析とJavaデータ構造ツリーのコード例
Java共通データ構造インタビューの質問(回答付き)
マルチモード文字列マッチングアルゴリズムの原則とJava実装コード
欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!