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;
else
return 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;
}


SOJ--Zig-Zag的更多相关文章

  1. Splay伸展树学习笔记

    Splay伸展树 有篇Splay入门必看文章 —— CSDN链接 经典引文 空间效率:O(n) 时间效率:O(log n)插入.查找.删除 创造者:Daniel Sleator 和 Robert Ta ...

  2. 图片Exif信息

    Exif文件格式简述链接:https://www.zhihu.com/question/23727439/answer/25467748 可交换图像文件常被简称为Exif(Exchangeable i ...

  3. 【BBST 之伸展树 (Splay Tree)】

    最近“hiho一下”出了平衡树专题,这周的Splay一直出现RE,应该删除操作指针没处理好,还没找出原因. 不过其他操作运行正常,尝试用它写了一道之前用set做的平衡树的题http://codefor ...

  4. 屏幕居中(DIV/CSS) 的几种方法(转)

    1.利用table特性,在width and height all set 100%的时候,可以把容器嵌套在td内形成绝对居中,此时的被嵌套容器可为绝对或者相对大小.(非标准)注意不能加声明! 如是在 ...

  5. ZJOI2017 Day2

    私のZJOI Day2 2017-3-22 08:00:07 AtCoder试题选讲 SYC(Sun Yican) from Shaoxing No.1 High School 2017-3-22 0 ...

  6. win10 uwp 进度条 WaveProgressControl

    昨天看到了有个大神做出好看的进度条样式,于是我就去抄袭他的代码,但是发现看不懂,于是本文主要翻译就是大神说这个控件如何做. 本文翻译 https://stackoverflow.com/a/46057 ...

  7. [Python] Codecombat 攻略 Sarven 沙漠 (1-43关)截止至30关

    首页:https://cn.codecombat.com/play语言:Python 第二界面:Sarven沙漠(43关)时间:4-11小时内容:算术运算,计数器,while循环,break(跳出循环 ...

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

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

  9. XV Open Cup named after E.V. Pankratiev. GP of America

    A. Area of Effect 首先最优解中必有一个点在圆的边界上. 若半径就是$R$,则枚举一个点,然后把剩下的事件极角扫描即可,时间复杂度$O(m(n+m)\log(n+m))$. 否则圆必然 ...

  10. Splay树分析

    简述 Splay树是一种二叉查找平衡树,其又名伸展树,缘由是对其进行任意操作,树的内部结构都会发生类似伸张的动作,换言之,其读和写操作都会修改树的结构.Splay树拥有和其它二叉查找平衡树一致的读写时 ...

随机推荐

  1. Java_String_01_由转义字符串得到其原本字符串

    在开发企业微信电子发票之拉取电子发票接口的时候,微信服务器会发送给我们一个2层的转义字符串,而我们要想得到我们想要的结果,就需要进行一些处理: 反转义+去除首尾双引号. 一.需求 现有一个字符串 st ...

  2. RobotFramework自动化测试环境配置

    现在工作是做自动化测试平台维护的,平台用的C#做的,主要是用来测试CMBRun项目,它是c/s结构的项目,而b/s结构的项目主要使用RF+Python来做.做这块之前听过自动化测试,身边的朋友也有做这 ...

  3. Intellij16创建Spring-Mybatis项目创(填)建(坑)记录,解决IDEA下找不到xml文件的问题

    转入Intellij已经有1个月了,编程效率确实比Eclipse快了很多,而且可以直接使用Maven,然后就想写个小项目玩玩,架构搭建完后,想着万事俱备,又不是第一次玩框架,照葫芦画瓢撑死半天就能完成 ...

  4. Maven 项目pom.xml报错

    Maven项目报 Failure to transfer org.apache.maven.plugins:maven-*-plugin:pom 原因是maven的plugin并未下载到本地 或者本地 ...

  5. 使用cobbler批量安装操作系统(基于Centos7.x )

    1.1 cobbler简介 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等. Cobbler可以使 ...

  6. let 和const与var的不同

    1. let的作用域在代码块中仅限在当前的作用于中 { var str1 = 12; console.log(str1); let str2 = 20; console.log(str2); //20 ...

  7. Hibernate框架学习之注解配置关系映射

         上篇文章我们通过注解对映射了单个实体类,但是具体项目中往往实体类之间又是相互关联的,本篇文章就是从实体类之间存在的不同关联角度,具体学习下如何映射他们之间的关联,主要涉及内容如下: 单向的一 ...

  8. 解决Webstom 2017中,输入法候选框无法显示问题

    一.问题: 如题,IDE编辑界面内,输入法的候选框没法显示,有时需要打中文注释,非常麻烦. 原因:IDE自带的OpenJDK与输入法存在冲突 二.解决: (1)在编辑界面,双shift,搜索:swit ...

  9. C#表达式目录树(Expression)

    1.什么是表达式目录树 :简单的说是一种语法树,或者说是一种数据结构(Expression) 2.用Lambda声明表达式目录树: Expression<Func<; //表达试目录树的方 ...

  10. SQL Server 基本操作之三种增加法

    前言: 数据库操作避免不了对数据的操作,操作方法大同小异,万变不离其宗,今就写一下各种花式操作的根本增删改查四种操作,今天我们就来说一下增加操作的三种方法 正文: 增加操作是对数据库进行数据行的添加, ...