当前位置: 代码迷 >> Java Web开发 >> 求一算法!该怎么处理
  详细解决方案

求一算法!该怎么处理

热度:103   发布时间:2016-04-17 01:13:38.0
求一算法!
算法

/**获取中心格子号周围的格子号组数
* @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;//返回}
  相关解决方案