Zig-Zag

在图形图像处理中经常须要将一个二维的图像矩阵转化为一维的向量。二维化一维的过程实际上就是将二维数组的元素按某种顺序构成一维数组。

一种经常使用的序列叫“Zig-Zag”序列。它按下面顺序将二维数组转化为一维数组:

你的任务,就是写一个程序把给定的二维数组按“Zig-Zag”顺序转化为一维数组。
    本题中全部的二维数组都是正方形的(即行数等于列数)。

输入

输入有多组測试数据。每组測试数据的第一行为一个整数n(1<=n<=50),表示二维数组的边长。

接下来是要转换的二维数组的数据,有n行。每行有n个整数(各整数的大小在1到100之间),各行中的整数之间用一个空格分隔。

输入的n为0表示输入结束。这一行不须要处理。

输出

对于每组測试数据,输出一行,即按“Zig-Zag”顺序转换得到的一维数组,数组中的数之间用一个空格分隔。

输入演示样例

2
1 2
3 4
3
1 2 3
4 5 6
7 8 9
0

输出演示样例

1 2 3 4
1 2 4 7 5 3 6 8 9

解析:今天在川大OJ做了个练习题(http://cstest.scu.edu.cn/soj/contest/problem.action?

cid=350&alias=D),感觉这道题出的还是不错的,不涉及什么高级算法,全然适合刚開始学习的人练习敲键盘的题,但也绝对不是看一眼立即能够写出来的。

開始看到这道题以为是类似于先前做的蛇形填数一样依照给定的顺序打印输出就可以。但细致一看。不得行。

所以又看了给定的顺序看是否有什么规律,果然是,于是就想到的排序。用排序来做感觉还是简单明了点。排序的规则是基于二维数组元素的行i+列j的和为基准的。

1.首先打印i+j较小的二维数组元素

2.假设i+j同样的。推断i+j的奇偶性,假设i+j为偶数  则按j的大小增序排列反之依照j降序排列就可以。

贴一些自己的代码(整体来看感觉自己写的代码还是太乱。。。)

#include <iostream>
#include <algorithm>
using namespace std;
//定义元素的结构体,方便排序
struct Elem{int data;int i;int j;
};
//自己定义排序算法
bool cmp(const Elem a , const Elem b)
{//首先按行+列的和进行递增排序if( (a.i+a.j) < (b.i+b.j) )return true;else if((a.i+a.j)==(b.i+b.j) && (a.i+a.j)%2==0 && a.i > b.i)return true;else if((a.i+a.j)==(b.i+b.j) && (a.i+a.j)%2!=0 && a.i < b.i)return true;elsereturn false;
}
int main()
{Elem a[2501];int n,data;while(cin >> n){int m=0;//终止条件if(n==0)break;//输入二维数组元素转换为自己定义的结构体来存储for(int i=0;i<n;++i)for(int j=0;j<n;++j){cin >> data;a[m].data=data;a[m].i=i;a[m++].j=j;}//依照cmp排序规则进行排序sort(a,a+m,cmp);//输出元素for(int i=0;i<n*n;++i)cout << a[i].data << " ";cout << endl;}return 0;
}

转载于:https://www.cnblogs.com/zsychanpin/p/6800834.html

SOJ--Zig-Zag相关推荐

  1. zigzag扫描matlab,ZIGZAG扫描的MATLAB实现 | 学步园

    转自阿须数码,用MATLAB实现MPEG中的 ZIG-ZAG 扫描.觉得有点研究价值,实现的方法也很巧妙. 下面给一个参照MPEG提供的方法: === function b=zigzag(a) % 这 ...

  2. 深度学习中几种常见的激活函数理解与总结

    学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数.tanh函数.Relu函数.肯定很多人刚开始和我一样一头雾水,接下来就让我们详细了解一下激活函 ...

  3. 25 个超棒的 WordPress 主题(2012)

    Lulu – Responsive WordPress Theme XO – Responsive Creative WordPress Theme The Arcadian Responsive W ...

  4. 伸展树(Splay tree)浅谈

    树看的越来越多,越来越神奇. 看伸展树这种神级数据结构之前,建议大家首先彻底明白二叉搜索树,这是万树的基础. 然后可以去看下treap,最好再去看下红黑树.如果有线段树的基础那更好了,我们会发现线段树 ...

  5. matlab zigzag算法,ZIGZAG扫描的MATLAB实现

    用MATLAB实现MPEG中的 ZIG-ZAG 扫描.觉得有点研究价值,实现的方法也很巧妙. 下面给一个参照MPEG提供的方法: === function b=zigzag(a) % 这是参照 Uni ...

  6. 大学本科 java教材,大学本科自学java之路——IO

    大学本科自学java之路--IO 大学本科自学java之路--IO 我现在大三,大一,大二就是玩,现在大三准备考虑就业了,特写博客便于坚持自己学习 一. 字节缓冲流的构造方法: BufferedOut ...

  7. Splay伸展树入门(单点操作,区间维护)附例题模板

    Pps:终于学会了伸展树的区间操作,做一个完整的总结,总结一下自己的伸展树的单点操作和区间维护,顺便给未来的自己总结复习用. splay是一种平衡树,[平均]操作复杂度O(nlogn).首先平衡树先是 ...

  8. Python 扩展C

    Python 扩展C Python 扩展C: 你写的任何代码使用任何编译语言如C,C + +或Java可以集成或导入到另一个Python脚本.此代码被认为是"扩展". 你写的任何代 ...

  9. asixs 响应慢_大智慧技术指标快捷键一览!转的!|家居理财 - 鱼叉论坛 - powered by php......

    大智慧技术指标快捷键一览!转的! 大智慧技术指标快捷键一览! [110]:MA 移动平均线[112]:CHANNELS 通道线 [114]:主力成本 [115]:TDX 天地线 [116]:SAR 抛 ...

  10. 关于splay的一些说明

    前言 splay出现的背景 它的操作 push_up rotate splay find insert next delete findkth main 前言 暑假快过完了,大家感觉是不是很棒!gay ...

最新文章

  1. 用bert来训练quoras question pairs的代码仓
  2. day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询
  3. w3school-html教程笔记-1-20140227
  4. DCMTK:列出dicom文件的内容
  5. Linux之systemd服务配置及自动重启
  6. ajax如何解决浏览器缓存问题
  7. 移动web前端开发框架_移动前端开发是Web前端开发吗?
  8. Python_多进程编程
  9. c++ stl string char* 向 string 转换的问题
  10. Distinct去除集合中的重复项GetHashCode方法没有返回obj.GetHashCode()导致出错
  11. AIR移动平台打开图片文件
  12. 仅供自用,大学三年收藏夹
  13. 【税务硕士论文】跨国公司无形资产转让定价税制改革探究(节选)
  14. Ext组件渲染render的全过程详述
  15. php三级分销思路 数据库设计_分销系统的用户关系,用户与推广链接的数据库设计。设计思路...
  16. 安装sts插件遇到的问题,cannot perform
  17. iphone 4 程序开发:真机测试 (免费无99刀)
  18. L1-030 一帮一(分数 15)
  19. 计算机体系架构(1)计算机组成原理
  20. AI实现语音文字处理,PaddleSpeech项目安装使用 | 机器学习

热门文章

  1. Elasticsearch 的新 range 丰富策略使上下文数据分析更上一层楼 - 7.16
  2. linux汇编push,在x86汇编中寄存器上使用的push / pop指令的功能是什么?
  3. flyme Android7.0 root,魅族 PRO 6 Plus Flyme 7.3.0.0A 完整ROOT权限获取教程
  4. 2023面试问答-计算机网络
  5. 深挖数据价值,英特尔加速医院数字化转型
  6. linux安装软件imagemagick,在Linux系统下ImageMagick的安装及使用方法
  7. 2009年网页设计趋势前瞻
  8. SEO如何低成本利用问答平台推广?
  9. 分享一个强大资源网站整合
  10. python实现ICTOWN免费领金币