日期:2014-05-18  浏览次数:20850 次

求一算法!
算法

/**获取中心格子号周围的格子号组数
* @param centerGrid 中心格子号
* @param distance 间距
* */
public int[] getGridNumbers(int centerGrid,int distance){


------解决方案--------------------
中心格子号 c
间距 d
长 l
宽 w
看成一个矩阵的话,中心格子的坐标为(d-1,d-1),格子号设为f(d-1,d-1)=c;矩阵的坐标表示为
(0,0)-(2d-2,2d-2)
算法:
1.先把第d-1行的元素的值求出来
for(int j=d-1;j>=0;j--)
{
f(d-1,j)=c--;
}
 for(int j=d-1;j<=2d-2;j++)
{
f(d-1,j)=c++;
}
2.再把d-2行--0行的值求出来
for(int i=d-2;i>=0;i--){
for(int j=2d-2;j>=0;j--){
f(i,j)=--f(d-1,0);
}
}
3.再把d行--2d-2行的值求出来
for(int i=d;i<=2d-2;i++){
for(int j=0;j<=2d-2;j++){
f(i,j)=++f(d-1,2d-2);
}
}
4.再把f(0,0)-f(2d-2,2d-2)打印出来

------解决方案--------------------
那边有点卡,先发到这里吧
Java code

public int[] getGridNumbers(int centerGrid,int distance,int width,int height){ 
        
    //定义一个数组
    int s[]=new int [(distance*2+1)*(distance*2+1)];
    //定义数组下标累加变量
    int n=0;
    //控制数据入位 因为distance是控制矩形范围,所以用了这样的循环    
    for(int i=-distance;i<=distance;i++){
        for(int j=-distance;j<=distance;j++){
            //判断中心点是否可以再扩展(需是正数)
            if(centerGrid+(-(i*width))>0){
                //根据各种值的关系,把数据放到数组中
                s[n++]=centerGrid+(-(i*width))+j;
            }
        }
    }
    return s;//返回
}