您的位置:首页 > 编程语言 > Java开发

一个算法,但是不知道名字,博客记录一下

2017-11-01 00:00 435 查看
摘要: 媳妇提给我的问题

输入4打印出

1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7

输入5打印出

1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9

一个逆时针循环叠加的操作,代码如下

import java.util.ArrayList;
import java.util.List;

public class Demo1 {

private int num=0 ;
private List<String[]> arrs  ;
private int numSer = 0 ;

public static void main(String[] args) {
new Demo1().start(5);
}

public void start(int num){
this.num = num ;

if(this.num<0){
System.out.println("不可小于0");
return ;
}

arrs = new ArrayList<String[]>() ;
String[] itemArr= null ;
for(int i=0 ;i<num;i++){
itemArr = new String[num] ;
arrs.add(itemArr) ;
}
bot(0, -1);

for(String[] items:arrs){

for(String s:items){
System.out.print(s+"\t");
}

System.out.println();
}

}
//下
private void bot(int x , int y){
y++;
boolean isbrek = false ;
int len = num -y ;
//System.out.println("x:"+x+",y:"+y);
if(arrs.get(y)[x]!=null){

return ;
}
for(;y<len;y++){
if(arrs.get(y)[x]!=null){
isbrek = true ;
y--;
break ;
}
numSer++ ;
arrs.get(y)[x] = numSer+"" ;
}
if(!isbrek){
y--;
}
right(x, y);
}
//右
private void right(int x , int y){
x++ ;
boolean isbrek = false ;
int len = num - x ;
if(arrs.get(y)[x]!=null){

return ;
}
for(;x<=len;x++){
if(arrs.get(y)[x]!=null){
isbrek = true ;
x--;
break ;
}
numSer++ ;
arrs.get(y)[x] = numSer+"" ;
}
if(!isbrek){
x-- ;
}
up(x,y) ;
//System.out.println("x:"+x+",y:"+y);

}
//上
private void up(int x , int y){
y-- ;
boolean isbrek = false ;
if(arrs.get(y)[x]!=null){

return ;
}
for(;y>=0;y--){
if(arrs.get(y)[x]!=null){
isbrek = true ;
y++;
break ;
}
numSer++ ;
arrs.get(y)[x] = numSer+"" ;
}

if(!isbrek){
y++;
}
left(x, y);

}
//左
private void left(int x , int y){
x-- ;
boolean isbrek = false ;
if(arrs.get(y)[x]!=null){

return ;
}
for(;x>=0;x--){
if(arrs.get(y)[x]!=null){
isbrek = true ;
x++;
break ;
}
numSer++ ;
arrs.get(y)[x] = numSer+"" ;
}
if(!isbrek){
x++ ;
}
bot(x, y);
}
}

,个人纪录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java
相关文章推荐