http://oj.jxust.edu.cn/contest/problem?id=1563&pid=4

题目描述

Storm有一个m行n列的整数矩阵。

他会从(1,1)开始,顺时针螺旋访问该矩阵,每个元素恰好被访问一次。

请你按Storm的访问顺序输出每个元素。

输入

第一行输入整数t,表示有t组数据,0 < t < 50;
第一行输入两个数m和n,其中0<m,n≤500;
之后m行,每行n个数以空格隔开,表示这个矩阵。

输出

输出t行,每行表示每组螺旋输出的结果

样例输入

1
3 4
1 2 3 4
5 6 7 8
9 10 11 12

样例输出

1 2 3 4 8 12 11 10 9 5 6 7 

题意很简单就是顺时针呈螺旋状将所有数组元素都访问一遍。

正确代码:
//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <string.h>
#include <vector>
#define ME(x , y) memset(x , y , sizeof(x))
#define SF(n) scanf("%d" , &n)
#define rep(i , n) for(int i = 0 ; i < n ; i ++)
#define INF 0x3f3f3f3f
#define mod 1000000007
using namespace std;
typedef long long ll ;
int a[][];
int vis[][];
int n , m ;
int dir[][] = {{,},{,},{,-},{-,}}; void dfs(int x , int y , int d)
{
vis[x][y] = ;
printf("%d " , a[x][y]);
for(int i = ; i < ; i++)//当i==1说明此时需要改变方向
{
int xx = x + dir[(i+d)%][];
int yy = y + dir[(i+d)%][];
if(vis[xx][yy] || xx < || xx >= n || yy < || yy >= m)
{
continue ;
} vis[xx][yy] = ;
dfs(xx , yy ,d+i);//一直往里递归 } } int main()
{
int t ;
scanf("%d" , &t);
while(t--)
{
memset(vis , , sizeof(vis));
scanf("%d%d" , &n , &m);
for(int i = ; i < n ; i++)
{
for(int j = ; j < m ; j++)
{
scanf("%d" , &a[i][j]);
}
}
dfs( , , );
cout << endl;
} return ;
}

错误代码:
//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <string.h>
#include <vector>
#define ME(x , y) memset(x , y , sizeof(x))
#define SF(n) scanf("%d" , &n)
#define rep(i , n) for(int i = 0 ; i < n ; i ++)
#define INF 0x3f3f3f3f
#define mod 1000000007
using namespace std;
typedef long long ll ;
int a[][];
int vis[][];
int n , m ; void dfs(int x , int y)
{
vis[x][y] = ;
printf("%d " , a[x][y]);
if(!vis[x][y+] && y+ < m)
dfs(x , y+);
if(!vis[x+][y] && x+ < n)
dfs(x+ , y);
if(!vis[x][y-] && y- >= )
dfs(x , y-);
if(!vis[x-][y] && x- >= )
dfs(x- , y);
} int main()
{
int t ;
scanf("%d" , &t);
while(t--)
{
memset(vis , , sizeof(vis));
scanf("%d%d" , &n , &m);
for(int i = ; i < n ; i++)
{
for(int j = ; j < m ; j++)
{
scanf("%d" , &a[i][j]);
}
}
dfs( , );
} return ;
}

dfs(魔力转圈圈)的更多相关文章

  1. 小b和矩阵

    2486 小b和矩阵 2 秒 262,144 KB 5 分 1 级题   小b有一个m行n列的矩阵. 她会从(1,1)开始,顺时针螺旋访问该矩阵,每个元素恰好被访问一次. 请你按小b的访问顺序输出每个 ...

  2. T4模板使用记录,生成Model、Service、Repository

    自己目前在搭建一个.NET Core的框架,本来是打算使用前端做代码生成器直接生成到文件的,快做好了.感觉好像使用T4更方便一些,所以也就有了这篇文章~  我还是有个问题没解决,就是我想生成每个类(接 ...

  3. 【疑难杂症】windows下如何有效重装印象笔记

    重装这么简单的操作还用得着写篇文章吗??emmmm,言之有理,简单的重装就是卸载后重新下载最新的安装包然后安装就完事了,这里说的肯定是不简单的重装[滑稽]. 背景是这样的,之前在mac上对印象笔记的笔 ...

  4. 你未必知道的49个CSS知识点

    作者:老姚,<JS正则迷你书>的作者 https://github.com/qdlaoyao/css-gif 本文的每一条,都是我曾经发过的掘金沸点,其中有很多条超过了百赞(窃喜).鉴于时 ...

  5. day 50 jquary 终极版本

    jQuary 一.jquary对象和dom对象 jquary找到的标签对象成为-- jquary对象 原生js找到的标签对象成为 -- dom对象 dom对象只能使用dom对象的方法,不能使用jque ...

  6. web笔记全

    1.项目流程与数据库 1.课程体系 阶段1(服务器开发): 项目导入/数据库/JS基础/NodeJS 阶段2(前端核心技术): HTML/AJAX/CSS/bootstrap 阶段3(前端进阶技术): ...

  7. SCI-HUB打不开了?附SCIHUB最新下载方式

    写在前面: 今天给大家推荐一个文献下载工具包:飞鸟科研助手 www.flybird.cc输入flybird.cc同样可以访问,存书签不失联!强调下:flybird.cc 读研之前,在一家NGS生殖应用 ...

  8. 文件共享NFS&&autofs

    文件传输工具 NFS服务 ftp vsftpd Samba linux和Windows之间进行文件共享 专用于linux和linux之间的专门的文件共享服务 (NFS服务),network,files ...

  9. 百度之星热身赛-1001(dfs拓扑排序)

    题意:作为年度优秀魔法学员的奖赏,哈利得到了一台具有魔力的计算机.这台计算机一旦开始处理某个任务,就会一直处理到这个任务结束为止(所以你可以认为它是单线程的).有一天,这台计算机得到了n个任务要处理, ...

随机推荐

  1. 作用域变量 var

    var没有块级作用域,定义后在当前闭包中都可以访问,如果变量名重复,就会覆盖前面定义的变量,并且也有可能被其他人更改. 变量名重复,就会覆盖前面定义的变量,并且也有可能被其他人更改: console. ...

  2. Array 和 ArrayList 、 List 以及 LinkedList 的区别

    下面列出了Array(数组)和ArrayList(集合)的不同点: Array可以包含基本类型和对象类型,ArrayList只能包含对象类型. Array大小是固定的,ArrayList的大小是动态变 ...

  3. axios 各种请求方式传递参数

    get delete 方法较为不同 注意:每个方法的传参格式不同,具体用法看下方 get请求方式将需要入参的数据作为 params 属性的值,最后整体作为参数传递 delete请求方式将将需要入参的数 ...

  4. SQL Server性能调优--优化建议(一)

    序言 当数据量小的时候,SQL优化或许无关紧要,但是当数据量达到一定量级之后,性能优化将变得至关重要,甚至决定系统成败. 定位慢查询 查询编译以来cpu耗时总量最多的前50条 --查询编译以来 cpu ...

  5. RabbitMQ(Exchange交换机详解)(四)

    Exchange:接收消息,并根据路由键转发消息所绑定的队列 ClientA,B将消息投递到交换机Exchange上,通过路由关系,投递到指定的queue1或者queue2上,通过监听投递到Clien ...

  6. JavaSE知识点:finalize,treeMap

    *)finalize finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等. *)treeMap 参考 ...

  7. 麦子lavarel---10、一些第三方应用注意

    麦子lavarel---10.一些第三方应用注意 一.总结 一句话总结: 其实把重要的几个功能弄一个就好了,邮箱验证,手机号验证,支付验证,都是调用第三方接口,也很简单 1.关于页面和服务端校验的看法 ...

  8. 线段树板子1(洛谷P3372)

    传送 一道线段树板子(最简单的) 似乎之前在培训里写过线段树的样子?不记得了 何为线段树? 一般就是长成这样的树,树上的每个节点代表一个区间.线段树一般用于区间修改,区间查询的问题. 我们如何种写一棵 ...

  9. Gradel 多渠道打包 代码混淆

    http://blog.csdn.net/ttccaaa/article/details/47687241 http://www.bubuko.com/infodetail-987756.html h ...

  10. Retrofit RestAdapter 配置说明

    RestAdapter.Builder builder = new RestAdapter.Builder();                    builder.setEndpoint(ip地址 ...