Prim算法(Java实现)

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];
                    }
                }
            }
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值