解题思路:如何转向,什么条件下转向,
注意事项:只是记录下代码
参考代码:
public class id1465 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
//数组只取中间部分,其他光报错,555
int[][] a = new int [n+2][m+2];
//b数组表示矩阵是否已经走过
//b[i][j]==1表示走过了,b[i][j]==0表示没走过了
int[][] b = new int [n+2][m+2];
//矩阵一共n*m个数,全放到f数组中
int[] f = new int [n*m];
//方向变化
int[][] c = {{-1,0},{0,1},{1,0},{0,-1}};
//输入矩阵
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
a[i][j] = sc.nextInt();
}
}
sc.close();
//k表示,f中放了多少个数了,f数组从0开始
int k = 0;
//l表示方向,初始方向向下,l为2
int l = 2;
//i,j初始位置
int i=1,j=1;
while (k!=n*m) {
//方向变换条件:
//这一步已走过了或超界
if (b[i][j]==1||i>n||i<=0||j>m||j<=0) {
//判断需要变化方向后,回到上一步
i-=c[l][0];
j-=c[l][1];
//变化方向
l--;
if (l==-1) {
l = 3;
}
//i,j走一步
i+=c[l][0];
j+=c[l][1];
}
//不用变化方向
if (b[i][j]==0) {
//f数组中加入数据
f[k] = a[i][j];
//b数组更改为走过了
b[i][j] = 1;
//i,j走一步
i+=c[l][0];
j+=c[l][1];
//
k++;
}
}
for (int j2 = 0; j2 < f.length-1; j2++) {
System.out.print(f[j2]+" ");
}
System.out.println(f[f.length-1]);
}
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题8.4 (Java代码)浏览:728 |
C语言训练-数字母 (C语言代码)浏览:582 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:574 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:915 |
1017题解浏览:571 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:537 |
1048题解(读入回车问题)浏览:554 |
简单的a+b (C语言代码)浏览:943 |
字符串的输入输出处理 (C语言代码)浏览:984 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:563 |