図の概念
グラフは、アルゴリズム内のツリーの拡張です。ツリーは、上から下までのデータ構造です。ノードには、上から下に配置された親ノード(ルートノードを除く)があります。グラフには父子ノードの概念はなく、グラフのノードはすべて等しい関係であり、結果がさらに複雑になります。
無向グラフ指示グラフ
図g =(v、e)、vは頂点を表し、eはエッジエッジを表し、エッジは固定点ペア(u、v)で、ここで(u、v)∈Vです。
過去2日間で、グラフに関するアルゴリズムに遭遇しました。私は長い間オンラインで検索しましたが、データ構造とそれらに関連する操作にJavaバージョンのグラフを見つけることができませんでした。そこで、データ構造の本のJavaバージョンを見つけて読みました。以下は、本の説明に基づいて編集されたグラフの無向グラフストレージと深さの優先度トラバーサルの要約です。ただし、このトラバーサルは接続されたグラフを通過するだけで、接続されていないグラフをトラバースするには、変更する必要があります。困っている人に役立つことを願っています。
パッケージcom.homework;/***スタッククラスを定義*/class stackx {private final int size = 20; private int [] st; private int top; // stack public stackx(){st = new int [size];} // stack public void push(int j){st [++top] {++top] {st [++ top] {st [++ top] {st [++ top] = j; st [top-];} //スタックパブリックint peak(){return st [top];} //スタックが空であるかどうかを判断する{return()return()return(top == -1);}/** * * * @author管理者 */クラスbertex; public char booe bis; lab){label = lab; wasvisited = false;}/** *グラフclass * @author管理者 * */classグラフ{private final int num = 20; private vertex vertexlist []; //ノードプライベートint adjmat []; //ノードマトリックスプライベートint nvert; // graph(){vertexlist = new Vertex [num]; adjmat = new int [num] [num]; nverts = 0; for(int i = 0; i <num; i ++){for(int j = 0; j <num; j ++)adjmat [i] [j] = 0;}} Vertex(lab);} // 2つのノードの間にエッジを追加しますpublic void addegge(int start、int end){adjmat [end] [end] = 1; adjmat [end] [start] = 1;} //特定のノードpublic void displayvertex(int v){system.out.out.poplint(get unslabel); getAdjunvisitedvertex(int v){for(int j = 0; j <nverts; j ++){if(adjmat [v] [j] == 1 && vertexlist [j] .wasvisited == false)return j dfs(){vertexlist [0] .wasvisited = true; displayvertex(0); thestack = new stackx(); thestack.push(0); while(!thestack.isempty()){int v = getadjunvisitedvertex(thestack.peak()); if(v == -1)//ノードが存在しない場合thestack.pop(); else {vertexlist [v] .wasvisited = true; displayvertex(v); thestack.push(v);}} for(int j = 0; j <nverts; j ++)vertexlist [j] .wasvisited = false;}} public class graphconnect {public static void main(string [] args){{{{graph thegraph = new Graph(); thegraph.addvertex( 'a'); thegraph.addvertex( 'b'); thegraph.addvertex( 'c'); thegraph.addvertex( 'd'); thegraph.addvertex( 'e'); thegraph.addedge(0、1); // ab thegraph.addedge(1、2); // bc thegraph.addedge(0、3); // ad thegraph.addedge(3、4); // de thegraph.addedge(2、4); // ce system.out.out.out( "訪問: "); thegraph.dfs(); system.out.println();}}}}プログラム実行の結果:
訪問した注文:虐待
要約します
上記は、Javaプログラミングの無向グラフ構造のストレージおよびDFS操作コードのすべての詳細な説明です。私はそれが誰にでも役立つことを願っています。興味のある友達は引き続きこのサイトを参照できます:
Javaプログラミングは、グラフベースの深度検索と幅最初の検索完全コードを実装しています
深さと幅広のJava実装コードの例
2つのツリーメニュー構造のJavaプログラミング変換コード
欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!