现有题如下:


接题思路:

  1. 先简化,我们输入的值为3.
  2. 首先生成一个二维数组且初始化为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

解决输出顺时针螺旋数组问题【寻路算法】相关推荐

  1. Java 实现顺时针螺旋二维数组输出

    看到一道有点意思的逻辑算法题,便着手实现一下.打印 N*N顺时针螺旋数组,规律如下: // 1 2 3 4 5 // 16 17 18 19 6 // 15 24 25 20 7 // 14 23 2 ...

  2. TW项目寻路算法最优实践

    一.描述         TW项目是一个拥有较广阔野外空间的SLG游戏,玩家的军队方阵可以在野外进行长距离行军.短距离自由行军.占领要塞.驻扎.形成战斗阵型战斗等行为.其中,野外的山脉.河流等会产生静 ...

  3. 算法笔记-螺旋输出二维数组

    算法笔记-螺旋输出二维数组 1.思路:二维数组看做一个坐标,遍历者当成一个人,那么我们定义这个人的位置,以及当前面朝的方向,还有这个人转向次数.初始位置,人在(x,y)=(0,0)处,面向右方,右方的 ...

  4. 每天一道LeetCode-----将m × n矩阵按照顺时针螺旋顺序转化成一维数组

    Spiral Matrix 原题链接Spiral Matrix 给定一个m × n矩阵,按照顺时针螺旋顺序将矩阵转化成一维数组. 螺旋的方向是先从左向右,再从上到下,然后从右到左,最后从下到上. 所以 ...

  5. 螺旋数组算法[中篇]--常规数学分析

    从农夫三拳的分析开始 在农夫三拳的博文里,我们可以看见一个神奇的公式 f(n) = 4*n^2 - 2*n + 1 当我们把起点1放到螺旋中心后,从内圈开始作为第一圈,如下图,3,13,31,57- ...

  6. JS 处理十六进制颜色渐变算法-输入颜色,输出渐变rgb数组

    html颜色有几种表示方式: 英文单词颜色值:background-color:Blue: 十六进制颜色值:background-color:#FFFFFF:  RGB颜色值三元数字:backgrou ...

  7. 顺时针螺旋打印二维数组

    想起来一道做过两次的竞赛题,明明之后重写了标程第二次还是想不起来怎么写了,愣是连续两次打表过(捂脸 题目:1,2,3-n*n 的数字按照顺时针螺旋的形式打印成矩阵,如下: 输入数字2,则程序输出: 1 ...

  8. A*寻路算法之解决路径多拐点问题

    1.问题描述 最近公司正在开发的游戏涉及到了寻路算法,然后我从网上找了一份A*算法代码,整理了一下写了一个A*算法基础实现.然而,在真正实用时A*寻路时,却发现了几个问题: 基础实现版的A*寻路算法在 ...

  9. 地图信息,障碍判断以及寻路算法(A星算法,B星算法和蚁群算法等)

    一.广度优先遍历和深度优先遍历 在学习寻路算法之前,我们先来了解一下广度优先遍历和深度优先遍历. 什么是广度优先遍历? 广度优先遍历(breadth first search)是一个万能的算法. 广度 ...

  10. javascript 刷新div_用 JavaScript 实现寻路算法 —— 编程训练

    同学们好,我是来自 <技术银河>的 ? 三钻 . 寻路算法练习 学习寻路算法有什么好处? 寻路是广度优先搜索算法 所有的搜索的算法的思路的非常相似 所以在讲广度优先的算法的过程中也可以把深 ...

最新文章

  1. 操作系统回忆录:进程、线程、资源调度
  2. 云炬随笔20211002
  3. 百度正式发布PaddlePaddle深度强化学习框架PARL
  4. python 冒泡排序 时间复杂度
  5. Oracle BI11启动失败
  6. java 数据验证_Java 数据验证
  7. C语言进程的内存地址空间分配
  8. 【LeetCode 69】Sqrt(x)
  9. 《记》rxjs分流操作符简单实现
  10. java设计模式之装饰者模式学习
  11. 网页爬虫工具BeautifulSoup使用总结
  12. 【日常】《中国统计年鉴》与《中国金融年鉴》数据表爬虫(附1985-2020所有Excel资源)
  13. 大篆汉字对照表_篆书转换器软件下载(篆体字转换汉字对照表)
  14. Kali Linux破解WiFi密码完整步骤
  15. H3C S5720交换机系统文件丢失一直重启的解决办法
  16. OPC Server
  17. 如何防止你的爬虫被网管一巴掌拍死
  18. HCIP-DATACOM H12-831(101-120)
  19. 关于主从复制的超详细解析(全)
  20. 2018年 团体程序设计天梯赛——题解集

热门文章

  1. 蓝桥杯2011--2--歌赛新规则
  2. 想要组装一台 RISC-V PC?试试这个 RISC-V 开发板
  3. 日常工作中,个人总结的 - Git - 常用操作方法 (三)
  4. (素材源码)猫猫学IOS(十)UI之_NSTimer_ios计时器
  5. 【译】AS3利用CPU缓存
  6. Windows XP搜索功能 包含文字 搜索不到内容的解决办法
  7. 大话西游之Office应用实例系列! 19
  8. 解释说明CCIE考试中的RIP问题
  9. matlab读取i o数据文件,Matlab 的数据文件读取
  10. java模拟键盘操作,java自动化操作