关于移动棋子的那道题,要求放置第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);
}
}