package Leetcode;
public class Prim {
static int[][] map= {
{999,5,6,4,999,999},
{5,999,1,2,999,999},
{6,1,999,2,5,3},
{4,2,2,999,999,4},
{999,999,5,999,999,4},
{999,999,3,4,4,999}
}; //用来存储矩阵,其中map[0][0]=999代表A----->A不可达, map[0][1]=5代表A---->B的距离为5,以此类推 ,。。。。。。。
static int[]book = new int[6]; //用来记录已经选择的点
static int[]dist = new int[6]; //用来存储到当前到各点的最小距离
public static void main(String[] args) {
int start = 0; //从点A开始
book[start]=1; //选中A以后,将A记录
System.out.println((char) (start+65)); //从A开始所以先输出A
for(int i=0;i<6;i++)
{
dist[i] = map[0][i]; //查找从A可以到达的点,记录他们的距离,为了找距离的最小值
}
for(int i=1;i<6;i++) //因为总共有6个点,我们已经选择了一个点(A),所以这里循环5次就行了,
{
int min = 999; //设置为999,是为了求最小值,这里不多做解释
for(int j=0;j<6;j++) //查找当前点可以到达的点
{
if(book[j]==0 && min>dist[j]) //如果这个点没有被选择过,并且最小值 要小于 当前距离,则更新最小值,然后更新当前节点
{
min = dist[j];
start = j;
}
}
book[start]=1; //此时,当前节点已经选好了,那么我们把该节点记录一下,防止重复选择
System.out.println((char) (start+65)); //输出当前节点
for(int k=0;k<6;k++) //更新距离,因为此时已经记录了超过1个节点了,所有我们需要重新替换dist数组
{
if(book[k]==0 && dist[k]>map[start][k]) //如果当前点没有选择过,并且现如今新的距离要小于旧的距离,则替换。
{
dist[k] = map[start][k];
}
}
}
}
}
Prim算法(Java实现)
最新推荐文章于 2023-09-11 15:51:05 发布