Skip to content

Latest commit

 

History

History
92 lines (66 loc) · 1.93 KB

3208.zzi-xing-sao-miao.md

File metadata and controls

92 lines (66 loc) · 1.93 KB

3208. Z字形扫描

在图像编码的算法中,需要将一个给定的方形矩阵进行 ZZ 字形扫描(Zigzag Scan)。

给定一个 n×nn×n 的矩阵,ZZ 字形扫描的过程如下图所示:

zig.png

对于下面的 4×44×4 的矩阵,

1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3

对其进行 ZZ 字形扫描后得到长度为 1616 的序列:1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3

请实现一个 ZZ 字形扫描的程序,给定一个 n×nn×n 的矩阵,输出对这个矩阵进行 ZZ 字形扫描的结果。

输入格式

输入的第一行包含一个整数 nn,表示矩阵的大小。

输入的第二行到第 n+1n+1 行每行包含 nn 个正整数,由空格分隔,表示给定的矩阵。

输出格式

输出一行,包含 n×nn×n 个整数,由空格分隔,表示输入的矩阵经过 ZZ 字形扫描后的结果。

数据范围

1≤n≤5001≤n≤500,
矩阵元素为不超过 10001000 的正整数。

输入样例:

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
package main

import (
    "fmt"
    )
    
var a = make([][]int, 510)

func main(){
    var n int
    fmt.Scanf("%d", &n)
    for i := 1; i <= n ; i ++ {
        a[i] = make([]int, 510)
        for j:= 1; j <= n; j ++{
            fmt.Scanf("%d", &a[i][j])
        }
    }
    // fmt.Println(n, a)
    for i := 2; i <= 2* n ; i ++ {
        if i % 2 != 0 {
            for j := 1 ; j < i ; j ++ {
                if j >= 1 &&  j <= n && i - j <= n && i - j >= 1{
                    fmt.Printf("%d ", a[j][i - j])
                }
            }
        }else{
            for j := i - 1 ; j > 0 ; j -- {
                if j >= 1 &&  j <= n && i - j <= n && i - j >= 1{
                    fmt.Printf("%d ", a[j][i - j])
                }
            }
        }
    }
    
}