顺时针遍历矩阵
需要遍历的矩阵
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
目标结果
1 2 3 4 5 10 15 20 19 18 17 16 11 6
7 8 9 14 13 12
直接贴代码
//遍历矩阵
int[][] pro=new int[][]{{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};
//记录已经遍历过的坐标
int[][] ed=new int[pro.length][pro[0].length];
//定义右下左上方向
int[][] dir=new int[][]{{0,1},{1,0},{0,-1},{-1,0}};
//矩阵元素个数
int sumNum=pro.length*pro[0].length;
//定义坐标
int x=0,y=0,a=0,b=0;
//第一个值直接打印
System.out.println(pro[x][y]);
ed[0][0]=1;
//都遍历过才停
for (int i=0,j=2;i<dir.length&&j<=sumNum;i++){
//往当前方向走一步
a=dir[i][0]+x;
b=dir[i][1]+y;
//还在矩阵内切还未遍历过
while (a<pro.length&&a>=0&&b<pro[a].length&&b>=0&&ed[a][b]==0){
x=a;
y=b;
System.out.println(pro[x][y]);
//往当前方向走一步
a=dir[i][0]+x;
b=dir[i][1]+y;
//标记遍历过的元素并且标记是第几个遍历
ed[x][y]=j++;
}
//方向重新开始
if (i>=dir.length-1){
i=-1;
}
}
System.out.println("打印完成");