zoukankan      html  css  js  c++  java
  • 基础练习 回形取数 (循环 + Java 输入输出外挂)

      基础练习 回形取数  
    时间限制:1.0s   内存限制:512.0MB
          
    问题描述
      回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
    输入格式
      输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
    输出格式
      输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
    样例输入
    3 3
    1 2 3
    4 5 6
    7 8 9
    样例输出
    1 4 7 8 9 6 3 2 5
    样例输入
    3 2
    1 2
    3 4
    5 6
    样例输出
    1 3 5 6 4 2
     
    析:看起来挺简单,只要按照它的要求输出,就可以了,主要是判断在拐弯的时候,只要前面已经出界,或者是已经走过了,就左拐,如果还走过,再左拐,总能够全部走完,但是Java 实在是太慢了,尤其是输入和输出,以至于我一直都是 90 ,后来加了一个输出外挂,才 100,由于输入外挂比输出要长,所以不爱写,但是C++ 是真的快,几乎就是 0 ms
    代码如下:
    import java.util.*;
    import java.io.*;
    
    public class Main{
      public static int [][]a;
      public static int []dr = {1, 0, -1, 0};
      public static int []dc = {0, 1, 0, -1};
      public static int n, m;
      public static boolean isIn(int r, int c){
        return r >= 0 && r < n && c >= 0 && c < m;
      }
      
      public static void main(String []args){
        Scanner cin = new Scanner(System.in);
        n = cin.nextInt();
        m = cin.nextInt();
        a = new int[n+5][m+5];
        for(int i = 0; i < n; ++i)
          for(int j = 0; j < m; ++j)
            a[i][j] = cin.nextInt();
        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
        out.print(a[0][0]);
        a[0][0] = -1;
        int idx = 0, r = 0, c = 0, cnt = 0;
        while(++cnt < m * n){
          while(true){
            int x = r + dr[idx];
            int y = c + dc[idx];
            if(isIn(x, y) && a[x][y] != -1){
              out.print(" " + a[x][y]);
              a[x][y] = -1;
              r = x;  c = y;
              break;
            }
            ++idx;
            if(idx >= 4)  idx -= 4;
          }
        }
        out.println();
        out.flush();
      }
    }
    

      

  • 相关阅读:
    转载:怎样用通俗的语言解释REST,以及RESTful?
    WiresShark 图解教程1
    派力奥 1.3 发动机
    EtherChannel Cisco 端口聚合详解
    Linux 排除问题的前5分钟
    Linux 定时任务crontab
    Linux SCP命令复制传输文件的用法
    Linux 挂载aliyun数据盘
    BCDedit 研究
    Bcdedit命令使用详解使用方法
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/8596522.html
Copyright © 2011-2022 走看看