私信TA

用户名:uq_96412813160

访问量:108

签 名:

等  级
排  名 13753
经  验 852
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:如何转向,什么条件下转向,

注意事项:只是记录下代码

参考代码:

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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区