• CCF Z字形扫描


    Z字形扫描

    时间限制: 2.0s
    内存限制: 256.0MB
     
    问题描述
      在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:

      对于下面的4×4的矩阵,
      1 5 3 9
      3 7 5 6
      9 4 6 4
      7 3 1 3
      对其进行Z字形扫描后得到长度为16的序列:
      1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
      请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。
     
    输入格式
      输入的第一行包含一个整数n,表示矩阵的大小。
      输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。
     
    输出格式
      输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后的结果。
     
    样例输入
    4
    1 5 3 9
    3 7 5 6
    9 4 6 4
    7 3 1 3
     
    样例输出
    1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
     
    评测用例规模与约定
      1≤n≤500,矩阵元素为不超过1000的正整数。
     
     
     
    解题:咋看,就像是在画圆。。。
     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 const int maxn = 600;
     5 int d[maxn][maxn],n;
     6 const int dir[2][2] = {-1,1,1,-1};
     7 bool isIn(int x,int y) {
     8     return x >= 0 && x < n && y >= 0 && y < n;
     9 }
    10 int main() {
    11     while(~scanf("%d",&n)) {
    12         for(int i = 0; i < n; ++i)
    13             for(int j = 0; j < n; ++j)
    14                 scanf("%d",d[i]+j);
    15         int m = n + n - 1;
    16         bool flag = true,o = false;
    17         for(int i = 0; i < m; ++i,flag = !flag) {
    18             for(int j = flag?0:i; flag?(j <= i):(j >= 0); flag?++j:--j) {
    19                 if(isIn(i-j,j)) {
    20                     if(o) putchar(' ');
    21                     printf("%d",d[i-j][j]);
    22                     o = true;
    23                 }
    24             }
    25         }
    26         putchar('
    ');
    27     }
    28     return 0;
    29 }
    View Code
  • 相关阅读:
    5.22 css和基本选择器
    5.21http网页基础
    ArrayList类源码浅析(二)
    ArrayList类源码浅析(一)
    Long类源码浅析
    Integer类源码浅析
    JDK中String类的源码分析(二)
    JDK中String类的源码分析(一)
    Struts2漏洞修复总结
    [LeetCode]-011-Longest Common Prefix
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4354569.html
Copyright © 2020-2023  润新知