解决输出顺时针螺旋数组问题【寻路算法】
现有题如下:
接题思路:
- 先简化,我们输入的值为3.
- 首先生成一个二维数组且初始化为0,如下图:
[0,0] = 0 | [0,0] = 0 | [0,0] = 0 |
[0,0] = 0 | [0,0] = 0 | [0,0] = 0 |
[0,0] = 0 | [0,0] = 0 | [0,0] = 0 |
此时我们建立一套规则,我们有一个变量记录方向,随着条件的变化,他的变化规则是→↓←↑(右下左上顺时针)。
- 当向右的时候数组[x,y], 判断数组[x,y]==0是否为真,当为真且y<3-1的时候x不变,y+1。当y>=3的时候,方向改为向下,并且把对应的步幅赋值给数组,此时数组如下:
[0,0]=1 | [0,1]=2 | [0,2]=3 |
[0,0] = 0 | [0,0] = 0 | [0,0] = 0 |
[0,0] = 0 | [0,0] = 0 | [0,0] = 0 |
- 当向下的时候,判断数组[x,y]==0是否为真,当为真且 x<3-1, 数组y不动,x+1,当x>=3的时候,方向改向左,此时数组如下:
[0,0]=1 [0,1]=2 [0,2]=3
[0,0] = 0[0,0] = 0 [1,2]=4 [0,0] = 0 [0,0] = 0 [2,2]=5
- 当向左的时候,判断数组[x,y]==0是否为真,当为真且y>1,数组x不动,y-1,当y<0的时候,方向改向上,此时数组如下:
[0,0]=1 [0,1]=2 [0,2]=3 [0,0] = 0 [0,0] = 0 [1,2]=4 [2,0]=7 [2,1]=6 [2,2]=5 - 当向上的时候,判断数组[x,y]==0是否为真,当为真且x>1,数组y不动,x-1,当x<0的时候,方向改向右,向右时用第一条规则,此时数组如下:
[0,0]=1 [0,1]=2 [0,2]=3 [1,0]=8 [1,1]=9 [1,2]=4 [2,0]=7 [2,1]=6 [2,2]=5
代码方面。把3发散为N,现在需要一个入参count,一个二维数组arr,一个记录步数的变量steps,一个表达方向的枚举。具体如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace SearchPath {class Searcher{private int count;private int[,] arr;private enum Direction{right,left,up,down}public Searcher(int count){this.count = count;arr = new int[count, count];}public int[,] SearchWay(){int x = 0;int y = 0;int steps = 1;Direction dir = Direction.right;arr[0, 0] = steps;while (true){switch (dir){case (Direction.right):{if (y + 1 < count && arr[x, y + 1] == 0){y++; steps++;arr[x, y] = steps;}else{dir = Direction.down;}}break;case (Direction.down):{if (x + 1 < count && arr[x + 1, y] == 0){x++; steps++;arr[x, y] = steps;}else{dir = Direction.left;}}break;case (Direction.left):{if (y - 1 >= 0 && arr[x, y - 1] == 0){y--; steps++;arr[x, y] = steps;}else{dir = Direction.up;}}break;case (Direction.up):{if (x - 1 < count && arr[x - 1, y] == 0){x--; steps++;arr[x, y] = steps;}else{dir = Direction.right;}}break;}if (steps == count * count){return arr;}}}} }
转载于:https://www.cnblogs.com/FanPigPig/p/10604819.html
解决输出顺时针螺旋数组问题【寻路算法】相关推荐
- Java 实现顺时针螺旋二维数组输出
看到一道有点意思的逻辑算法题,便着手实现一下.打印 N*N顺时针螺旋数组,规律如下: // 1 2 3 4 5 // 16 17 18 19 6 // 15 24 25 20 7 // 14 23 2 ...
- TW项目寻路算法最优实践
一.描述 TW项目是一个拥有较广阔野外空间的SLG游戏,玩家的军队方阵可以在野外进行长距离行军.短距离自由行军.占领要塞.驻扎.形成战斗阵型战斗等行为.其中,野外的山脉.河流等会产生静 ...
- 算法笔记-螺旋输出二维数组
算法笔记-螺旋输出二维数组 1.思路:二维数组看做一个坐标,遍历者当成一个人,那么我们定义这个人的位置,以及当前面朝的方向,还有这个人转向次数.初始位置,人在(x,y)=(0,0)处,面向右方,右方的 ...
- 每天一道LeetCode-----将m × n矩阵按照顺时针螺旋顺序转化成一维数组
Spiral Matrix 原题链接Spiral Matrix 给定一个m × n矩阵,按照顺时针螺旋顺序将矩阵转化成一维数组. 螺旋的方向是先从左向右,再从上到下,然后从右到左,最后从下到上. 所以 ...
- 螺旋数组算法[中篇]--常规数学分析
从农夫三拳的分析开始 在农夫三拳的博文里,我们可以看见一个神奇的公式 f(n) = 4*n^2 - 2*n + 1 当我们把起点1放到螺旋中心后,从内圈开始作为第一圈,如下图,3,13,31,57- ...
- JS 处理十六进制颜色渐变算法-输入颜色,输出渐变rgb数组
html颜色有几种表示方式: 英文单词颜色值:background-color:Blue: 十六进制颜色值:background-color:#FFFFFF: RGB颜色值三元数字:backgrou ...
- 顺时针螺旋打印二维数组
想起来一道做过两次的竞赛题,明明之后重写了标程第二次还是想不起来怎么写了,愣是连续两次打表过(捂脸 题目:1,2,3-n*n 的数字按照顺时针螺旋的形式打印成矩阵,如下: 输入数字2,则程序输出: 1 ...
- A*寻路算法之解决路径多拐点问题
1.问题描述 最近公司正在开发的游戏涉及到了寻路算法,然后我从网上找了一份A*算法代码,整理了一下写了一个A*算法基础实现.然而,在真正实用时A*寻路时,却发现了几个问题: 基础实现版的A*寻路算法在 ...
- 地图信息,障碍判断以及寻路算法(A星算法,B星算法和蚁群算法等)
一.广度优先遍历和深度优先遍历 在学习寻路算法之前,我们先来了解一下广度优先遍历和深度优先遍历. 什么是广度优先遍历? 广度优先遍历(breadth first search)是一个万能的算法. 广度 ...
- javascript 刷新div_用 JavaScript 实现寻路算法 —— 编程训练
同学们好,我是来自 <技术银河>的 ? 三钻 . 寻路算法练习 学习寻路算法有什么好处? 寻路是广度优先搜索算法 所有的搜索的算法的思路的非常相似 所以在讲广度优先的算法的过程中也可以把深 ...
最新文章
- 操作系统回忆录:进程、线程、资源调度
- 云炬随笔20211002
- 百度正式发布PaddlePaddle深度强化学习框架PARL
- python 冒泡排序 时间复杂度
- Oracle BI11启动失败
- java 数据验证_Java 数据验证
- C语言进程的内存地址空间分配
- 【LeetCode 69】Sqrt(x)
- 《记》rxjs分流操作符简单实现
- java设计模式之装饰者模式学习
- 网页爬虫工具BeautifulSoup使用总结
- 【日常】《中国统计年鉴》与《中国金融年鉴》数据表爬虫(附1985-2020所有Excel资源)
- 大篆汉字对照表_篆书转换器软件下载(篆体字转换汉字对照表)
- Kali Linux破解WiFi密码完整步骤
- H3C S5720交换机系统文件丢失一直重启的解决办法
- OPC Server
- 如何防止你的爬虫被网管一巴掌拍死
- HCIP-DATACOM H12-831(101-120)
- 关于主从复制的超详细解析(全)
- 2018年 团体程序设计天梯赛——题解集