ホームページ Java &#&チュートリアル Javaを使用してフロイドのアルゴリズムを実装する方法

Javaを使用してフロイドのアルゴリズムを実装する方法

Sep 20, 2023 pm 04:22 PM
Javaはフロイドアルゴリズムを実装します フロイドアルゴリズムのJava実装 Javaでフロイドアルゴリズムを書く

Javaを使用してフロイドのアルゴリズムを実装する方法

Java を使用してフロイドのアルゴリズムを実装する方法

フロイドのアルゴリズムは、任意の 2 つの頂点間の最短経路を見つけるために使用されるアルゴリズムです。プログラミングでは、最短経路の値を継続的に更新して最適な解を見つけます。この記事では、Java プログラミング言語を使用してフロイドのアルゴリズムを実装する方法を紹介し、具体的なコード例を示します。

  1. アルゴリズム原理
    フロイドのアルゴリズムの基本的な考え方は、2 次元行列を定義することで任意の 2 つの頂点間の最短経路長を保存し、その値を継続的に更新することです。最終的な最短経路までの行列。アルゴリズムの手順は次のとおりです。
  • 2 次元配列 d[][] を定義します。ここで、di は頂点 i と頂点 j の間の最短パス長を表します。最初は、di=infinity (2 つの頂点間にパスがないことを意味します) です。
  • グラフ内の各エッジ (i, j) について、di の値をエッジの重みに更新します。
  • 各頂点 k について、グラフ内のすべての頂点 i と頂点 j を走査します。di > di dk の場合、di の値を di dk に更新します。
  • すべての頂点間の最短パス長が更新されるまで、上記の手順を繰り返します。
  1. コードの実装
    Java プログラミング言語を使用して Floyd アルゴリズムを実装するコードは次のとおりです:
public class FloydAlgorithm {
    
    public static void floyd(int[][] graph) {
        int n = graph.length;
        
        // 初始化最短路径矩阵
        int[][] dist = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                dist[i][j] = graph[i][j];
            }
        }
        
        // 更新最短路径矩阵
        for (int k = 0; k < n; k++) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (dist[i][k] != Integer.MAX_VALUE && dist[k][j] != Integer.MAX_VALUE
                            && dist[i][k] + dist[k][j] < dist[i][j]) {
                        dist[i][j] = dist[i][k] + dist[k][j];
                    }
                }
            }
        }
        
        // 输出最短路径矩阵
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print(dist[i][j] + "    ");
            }
            System.out.println();
        }
    }
    
    public static void main(String[] args) {
        int[][] graph = {
            {0, 5, Integer.MAX_VALUE, 10},
            {Integer.MAX_VALUE, 0, 3, Integer.MAX_VALUE},
            {Integer.MAX_VALUE, Integer.MAX_VALUE, 0, 1},
            {Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, 0}
        };
        floyd(graph);
    }
}

上記のコードでは、次のように定義します。 FloydAlgorithm クラスの floyd メソッドは、Floyd アルゴリズムを実装するために使用されます。 main メソッドでは、サンプル グラフの隣接行列グラフを定義し、最短パス行列を解くために floyd メソッドを呼び出します。

  1. 概要
    この記事では、Java プログラミング言語を使用して Floyd アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。フロイドのアルゴリズムを使用すると、任意の 2 つの頂点間の最短経路長を迅速かつ効率的に解決でき、実際的な問題を解決するための強力なツールが得られます。

以上がJavaを使用してフロイドのアルゴリズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

Javaのデッドロックとは何ですか?どうすればそれを防ぐことができますか? Javaのデッドロックとは何ですか?どうすればそれを防ぐことができますか? Aug 23, 2025 pm 12:55 PM

adeadlockinjavaoccurswhentwoorthoreThreadsareblockededforever、それぞれの方向に、通常はdueTococularwaitcausedistentlockdoringを使用します

Javaで一連の文字列を結合する方法は? Javaで一連の文字列を結合する方法は? Aug 04, 2025 pm 12:55 PM

string.join()(java8)を使用することは、ストリングアレイを接続するための最も簡単な推奨方法であり、セパレーターを直接指定するだけです。 2。Javaの古いバージョンの場合、またはより多くのコントロールが必要な場合、StringBuilderを使用して手動でトラバースしてスプライスできます。 3。StringJoinerは、接頭辞や接尾辞などのより柔軟な形式を必要とするシナリオに適しています。 4。array.stream()とcollectors.jaining()を組み合わせて、結合する前に配列のフィルタリングまたは変換に適しています。要約すると、Java8以降を使用する場合、String.Join()メソッドを望む必要があります。これは簡潔で読みやすいですが、複雑なロジックには推奨されます。

JavaにシンプルなTCPクライアントを実装する方法は? JavaにシンプルなTCPクライアントを実装する方法は? Aug 08, 2025 pm 03:56 PM

importjava.ioandjava.net.socketfori/oandsocketCommunication.2.CreateAsocketObjectToConnectTotheServerusingHostNameandport.3.USEPRINTWRITERTOSENDDATAVIAOUTSTREAMANDBUFFEREDEDEDEDEDEDEREDEREDERTOREADEREADSERVERRESPONSESSTREAM.

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

Javaの2つの文字列を比較する方法は? Javaの2つの文字列を比較する方法は? Aug 04, 2025 am 11:03 AM

.equals()メソッドを使用して文字列コンテンツを比較します。これは、==はコンテンツではなくオブジェクト参照のみを比較するためです。 1。.equals()を使用して、文字列値を均等に比較します。 2。.equalsignorecase()を使用して、ケースを無視して比較します。 3. .compareto()を使用して、辞書の順序で文字列を比較し、0、負、または正の数を返します。 4。.compareToignOreCase()を使用して、ケースを無視して比較します。 5。objects.equals()またはセーフコールメソッドを使用して、ヌル文字列を処理して、ヌルポインターの例外を回避します。要するに、オブジェクトが位相にあるかどうかを確認するために明示的に必要な場合を除き、文字列コンテンツの比較に==を使用しないでください。

JavaのWebSocketを介してメッセージを送信および受信する方法 JavaのWebSocketを介してメッセージを送信および受信する方法 Aug 16, 2025 am 10:36 AM

@ServerEndPointを使用してパスを定義するWebSocketサーバーエンドポイントを作成し、 @Onopen、 @Onmessage、 @Onclose、 @Onerrorを介して接続、メッセージ受信、閉鎖、エラーを処理します。 2. Javax.Websocket-API依存関係が展開中に導入され、コンテナによって自動的に登録されることを確認してください。 3. Javaクライアントは、ContainerProviderを介してWebSocketContainerを取得し、ConnectToServerを呼び出してサーバーに接続し、@ClientEndPoint Annotationクラスを使用してメッセージを受信します。 4。セッションGetBasicreを使用します

Spring BootアプリケーションでのEncoding EncodingNontf-8リクエストを処理するための正しい姿勢 Spring BootアプリケーションでのEncoding EncodingNontf-8リクエストを処理するための正しい姿勢 Aug 15, 2025 pm 12:30 PM

この記事では、非UTF-8要求エンコーディングを処理するためのスプリングブートアプリケーションのメカニズムと一般的な誤解について説明します。コアは、HTTPコンテンツタイプのヘッダーのcharsetパラメーターの重要性と、スプリングブートのデフォルトの文字セット処理フローを理解することにあります。誤ったテスト方法によって引き起こされる文字化けコードを分析することにより、この記事は、異なるエンコーディングのリクエストを正しくシミュレートしてテストする方法を読者に指導し、クライアントがエンコードを正しく宣言する前提で互換性を達成するために複雑な構成を必要としないことを説明します。

See all articles