Passion and Patience

Work Hard, Play Hard

导航

旋转魔方+ 搭建浮桥

import java.util.*;
import java.math.*;

public class Main{
    public static void main(String[] args){
        int minCost = Integer.MAX_VALUE, minDis = Integer.MAX_VALUE;
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String[] nc = str.split(" ");
        int N = Integer.parseInt(nc[0]);
        int C = Integer.parseInt(nc[1]);
        // // 初始化距离数组
        // int[][] dis = new int[N][N];
        Map<HashMap,Integer> map= new HashMap<>();
        for(int i =0;i<N*(N-1)/2;i++){
            String strs = in.nextLine();
            String[] nums = strs.split(" ");
            // 浮桥跨桥的索引
            int l = Integer.parseInt(nums[0]);
            int m = Integer.parseInt(nums[1]);
            // // 两岛屿之间的距离
            // dis[l][m] = Integer.parseInt(nums[2]);
            // dis[m][l] = Integer.parseInt(nums[2]);
            HashMap<Integer,Integer> pair = new HashMap<>();
            pair.put(l,m);
            map.put(pair,Integer.parseInt(nums[2]));
        }
        
        // krukal算法
        while(minPay(map,N)!=Integer.MAX_VALUE){
            minCost+= minPay(map,N);
        }
        
        System.out.println(minCost*C) ;
              
    }
    
    public static int minPay(Map<HashMap,Integer> map,int N){
        int min = Integer.MAX_VALUE;
        HashMap<Integer,Integer> minpair = new HashMap<>();
        HashMap<Integer,Integer> pair2 = new HashMap<>();
        for(int i=1;i<=N;i++){
            for(int j=i+1;j<=N;j++){  
                pair2.clear();
                pair2.put(i,j);
                if(map.get(pair2)<min){                 
                    minpair.clear();
                    minpair.put(i,j);
                    min = map.get(pair2);                    
                }                
            }           
        }
        map.put(minpair,Integer.MAX_VALUE);
        return min;
        // 找到最小的后将两座岛之间的浮桥价格定为无穷大
    }
}

posted on 2024-04-08 00:20  安静的聆  阅读(5)  评论(0编辑  收藏  举报