cargo center

将某城市划分为m*n个区域,每个区域货物量保存在二维数组。将每个区的货物送到一个cargo center,汽车只能上,下,左,右,四个方向移动。求center使所有货物运到这儿的cost最小。

初中物理有道题,给你一块不均匀木板,如何找到它的重心。用一根绳吊起来,画一条垂直线,再换个地方吊起了画出垂直线。两线交叉的地方就是重心。
这道题也是一样,先找出最小的列使所有点到这一列的cost最小。再找到行所有点到这一行的cost最小。so返回找到的行号和列号。
某公司的笔试题,是不是很简单,让我哭会。为啥当时就没做出来呢!!

public class Cargo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //int[][] A = new int[][]{{0,0,2,5},{6,0,0,0}};
        int[][] A = new int[][]{{0,2,0,5},{1,0,0,0}};
        int[] result = new int[2];
        result = findCenter(A);
        System.out.println("row:"+result[0]+" col:"+result[1]);

    }

    public static int[] findCenter(int[][] A){
        int[] result = new int[2];
        int rows = A.length;
        int cols = (A[0]).length;
        int minSum = Integer.MAX_VALUE;
        int minCol=0;
        // find col
        for(int col=0; col<cols; col++){
            int sum = 0;
            for(int j=0; j<cols; j++){
                for(int i=0; i<rows; i++){
                    sum += A[i][j] * Math.abs(col-j);
                }
            }
            if(sum<minSum){
                minSum = sum;
                minCol = col;
            }
        }       
        // find row
        minSum = Integer.MAX_VALUE;
        int minRow = 0;
        // find row
        for(int row=0; row<rows; row++){
            int sum = 0;
            for(int i=0; i<rows; i++){
                for(int j=0; j<cols; j++){
                    sum += A[i][j] * Math.abs(row-i);
                }
            }
            if(sum<minSum){
                minSum = sum;
                minRow = row;
            }
        }   
        result[0] = minRow;
        result[1] = minCol;
        return result;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值