public class Test {
public static void main(String[] args) {
int n = 5;
int num = 2;
int r = 0, c = 0;
int a[][] = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = 0;
}
}
int[][] path = { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } };// 下右上左
a[0][0] = 1;
while (num <= n * n) {
for (int i = 0; i < 4; i++) {
r += path[i][0];
c += path[i][1];
if (r < n && c < n && r >= 0 && c >= 0 && a[r][c] == 0) {
if (path[i][0] == 1 && path[i][1] == 0) {// 如果 是下
r -= path[i][0];
c = c - path[i][1] - 1;// 试试左行不行
if (r < n && c < n && r >= 0 && c >= 0 && a[r][c] == 0) {// 如果左边可以,先走左边
a[r][c] = num++;
break;
} else {// 如果不行还原
r += path[i][0];
c = c + (path[i][1] + 1);
}
}
a[r][c] = num++;
break;
} else {
r -= path[i][0];
c -= path[i][1];
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
}
}
双螺旋问题
最新推荐文章于 2019-09-10 17:40:41 发布