用Java编辑实现warshall算法_Java Floyd-Warshall算法实现

本文展示了如何使用Java编程实现Floyd-Warshall算法,该算法用于计算图中所有顶点之间的最短路径。通过初始化距离矩阵并迭代更新,找出最短路径。最后,程序会打印出计算得到的最短距离矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.Scanner;

public class FloydWarshall

{

private int DistanceMatrix[][];

private int numberofvertices;//number of vertices in the graph

public static final int INFINITY = 999;

public FloydWarshall(int numberofvertices)

{

DistanceMatrix = new int[numberofvertices + 1][numberofvertices + 1];//stores the value of distance from all the possible path form the source vertex to destination vertex

Arrays.fill(DistanceMatrix, 0);

this.numberofvertices = numberofvertices;

}

public void floydwarshall(int AdjacencyMatrix[][])//calculates all the distances from source to destination vertex

{

for (int source = 1; source <= numberofvertices; source++)

{

for (int destination = 1; destination <= numberofvertices; destination++)

{

DistanceMatrix[source][destination] = AdjacencyMatrix[source][destination];

}

}

for (int intermediate = 1; intermediate <= numberofvertices; intermediate++)

{

for (int source = 1; source <= numberofvertices; source++)

{

for (int destination = 1; destination <= numberofvertices; destination++)

{

if (DistanceMatrix[source][intermediate] + DistanceMatrix[intermediate][destination]

< DistanceMatrix[source][destination])//if the new distance calculated is less then the earlier shortest calculated distance it get replaced as new shortest distance

DistanceMatrix[source][destination] = DistanceMatrix[source][intermediate]

+ DistanceMatrix[intermediate][destination];

}

}

}

for (int source = 1; source <= numberofvertices; source++)

System.out.print("\t" + source);

System.out.println();

for (int source = 1; source <= numberofvertices; source++)

{

System.out.print(source + "\t");

for (int destination = 1; destination <= numberofvertices; destination++)

{

System.out.print(DistanceMatrix[source][destination] + "\t");

}

System.out.println();

}

}

public static void main(String... arg)

{

int Adjacency_Matrix[][];

int numberofvertices;

Scanner scan = new Scanner(System.in);

System.out.println("Enter the number of vertices");

numberofvertices = scan.nextInt();

Adjacency_Matrix = new int[numberofvertices + 1][numberofvertices + 1];

System.out.println("Enter the Weighted Matrix for the graph");

for (int source = 1; source <= numberofvertices; source++)

{

for (int destination = 1; destination <= numberofvertices; destination++)

{

Adjacency_Matrix[source][destination] = scan.nextInt();

if (source == destination)

{

Adjacency_Matrix[source][destination] = 0;

continue;

}

if (Adjacency_Matrix[source][destination] == 0)

{

Adjacency_Matrix[source][destination] = INFINITY;

}

}

}

System.out.println("The Transitive Closure of the Graph");

FloydWarshall floydwarshall = new FloydWarshall(numberofvertices);

floydwarshall.floydwarshall(adjacency_matrix);

scan.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值