转圈数 java

来源:互联网 发布:单证研究生有用吗 知乎 编辑:程序博客网 时间:2024/05/16 20:57
package 转圈数;

import java.util.ArrayList;

/**
*
* @author Administrator
*/
public class 转圈数 {

static ArrayList<Integer> printal = new ArrayList<Integer>();

public static void main(String[] args) {

//设置n值
int n = 10;
//数组初始化
for (int i = n * n * n; i > 0; i--) {
printal.add(-1);
}

int x = 0;//坐标
int y = 0;//坐标
int sum = 0;//加和
int flag = 0; //方向

for (int i = n * n; i > 0; i--) {

if (printal.get(x + y * n) == -1 && x < n && y < n) {
printal.set(x + y * n, sum++);
//向前移动一个地方
if (flag == 0) {
x++;
}
if (flag == 1) {
y++;
}
if (flag == 2) {
x--;
}
if (flag == 3) {
y--;
}


} else {//方向归零
if (flag == 3) {
flag = -1;
}
flag++;
i++;//帮助这个计数器返回
//返回的向前走
if (flag == 0) {
x++;
}
if (flag == 1) {
y++;
}
if (flag == 2) {
x--;
}
if (flag == 3) {
y--;
}
//错误的向后退
if (flag == 0) {
y++;
}
if (flag == 1) {
x--;
}
if (flag == 2) {
y--;
}
if (flag == 3) {
x++;
}

}
}
//输出
int h = 0;
int point = 0;
for (int p : printal) {
System.out.printf("%5d", p);
if (++point == n * n) {
break;
}
if (++h == n) {
h = 0;
System.out.println();
}
}
}
}


效果


run:
0 1 2 3 4 5 6 7 8 9
35 36 37 38 39 40 41 42 43 10
34 63 64 65 66 67 68 69 44 11
33 62 83 84 85 86 87 70 45 12
32 61 82 95 96 97 88 71 46 13
31 60 81 94 99 98 89 72 47 14
30 59 80 93 92 91 90 73 48 15
29 58 79 78 77 76 75 74 49 16
28 57 56 55 54 53 52 51 50 17
27 26 25 24 23 22 21 20 19 18成功构建 (总时间: 2 秒)