关于移动棋子的那道题,要求放置第i个棋子时有一个格子至少有i个棋子的最少操作数。棋子位置不同,要将i个棋子移动到同一个格子中,那就是i-1个棋子移动到某一个棋子的同一行同一列,那就行列分别移动求最小距离即最小操作数。解法有点暴力,或者解法根本不对。。。。

public class Dynamic {

    /**
     * @param args
     * 
     */
    public void findOneByOne(int []x, int[]y,int n){
        if(x==null || y==null || n==0) return;
        for(int i=1;i<=n;i++){
            int times=findMin(x,y,i);
            System.out.print(times+"  ");
        }
    }
    private int findMin(int [] x, int[] y,int n){
        int minx=Integer.MAX_VALUE;
        int miny=Integer.MAX_VALUE;
        for(int i=0;i<n;i++ ){
            int total=0;
            for(int j=0;j<n;j++){
                if(i!=j){
                    total+=Math.abs(x[j]-x[i]);
                }
            }
           minx=total<minx?total:minx;
        }

        for(int i=0;i<n;i++ ){
            int total=0;
            for(int j=0;j<n;j++){
                if(i!=j){
                    total+=Math.abs(y[j]-y[i]);
                }
            }
           miny=total<miny?total:miny;
        }
        return minx+miny;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int a[]={1,2,4,9};
        int b[]={1,1,1,1};
        int n=4;
       new Dynamic().findOneByOne(a, b, n);

    }

}