思路
设置两个函数,一个用来判断下一步移动的方向(selectflag),一个用来判断移动后的坐标(move)。当遍历到二维数组的最后一个值时,停止遍历。
这个题让我想到了之前做的一道笔试题,OpenJudge 二维数组回形遍历 Java都是一个类型的,就一块写一下。
代码
import java.util.ArrayList;
import java.util.Scanner;
public class CCF2014122 {
static Scanner sc = new Scanner(System.in);
static int n = sc.nextInt();
static int x = 0;
static int y = 0;
static int flag = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[][] = new int[n][n];
for(int i = 0;i<n;i++) {
for(int j = 0;j<n;j++) {
arr[i][j] = sc.nextInt();
}
}
sc.close();
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(arr[x][y]);
while(x != n-1 || y != n-1) {
selectflag();
move();
list.add(arr[x][y]);
}
for(int i:list) {
System.out.print(i+" ");
}
}
public static void move() {
if(flag == 1) {//右
y +=1;
}else if(flag == 2) {//左下
x += 1;
y -= 1;
}else if(flag == 3) {//下
x += 1;
}else if(flag == 4) {//右上
x -= 1;
y += 1;
}
}
public static void selectflag() {
if(flag == 0) {
if(y!= n-1) {
flag = 1;
}
}else if(flag == 1) {
if(x == 0) {
flag = 2;//左下
}
if(x == n-1) {
flag = 4;
}
}else if(flag == 2) {//左下
if(y == 0 && x != n-1) {
flag = 3; //下
}
if(x == n-1) {
flag = 1;
}
}else if(flag == 3) {//xia
if(y == 0) {
flag = 4;
}
if(y == n-1) {
flag = 2;
}
}else if(flag == 4) {//右上
if(x == 0 && y != n-1) {
flag = 1;
}
if(y == n-1) {
flag = 3;
}
}
}
}