矩阵和算法“螺旋”

2024-03-01

我想问是否有一些算法准备好,允许我这样做:我有一个矩阵 m(列)x n(行),其中有 m x n 元素。我想给这个元素从中心开始并以螺旋形式旋转的位置,例如,对于 3x3 的矩阵,我有 9 个这样定义的元素:

 5  6  7
 4  9  8
 3  2  1 

或者对于 una 矩阵 4 x 3 我有 12 个元素,请定义:

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

或者,一个 5x2 的矩阵有 10 个元素,如下定义:

    3  4
    7  8
   10  9
    6  5 
    2  1

ETC。 我已经基本上解决了定义 m x n 元素的整数数组并手动加载值的问题,但对我来说,就像自动由算法生成的矩阵一样。 感谢谁能帮我找到一些东西,非常感谢。

UPDATE

这段代码,完全符合我想要的,但不是在delphi中;只是我需要从 1 开始,而不是从 0 开始。对我来说重要的是它对任何矩阵 m x n 都有效。谁帮我翻译一下delphi?

(defun spiral (rows columns)  
  (do ((N (* rows columns))       
    (spiral (make-array (list rows columns) :initial-element nil))      
    (dx 1) (dy 0) (x 0) (y 0)    
   (i 0 (1+ i)))     
 ((= i N) spiral)   
 (setf (aref spiral y x) i)
    (let ((nx (+ x dx)) (ny (+ y dy)))  
    (cond       
       ((and (< -1 nx columns)       
       (< -1 ny rows)           
       (null (aref spiral ny nx)))    
    (setf x nx 
          y ny))  
     (t (psetf dx (- dy)                 
       dy dx)       
    (setf x (+ x dx)             
     y (+ y dy))))))) 


> (pprint (spiral 6 6))

#2A ((0  1  2  3  4  5)
    (19 20 21 22 23  6)
    (18 31 32 33 24  7)
    (17 30 35 34 25  8)
    (16 29 28 27 26  9)
    (15 14 13 12 11 10))


> (pprint (spiral 5 3))

#2A  ((0  1 2)
     (11 12 3)
     (10 13 4)
      (9 14 5)
      (8 7 6))

再次非常感谢。


基于经典螺旋算法 http://rosettacode.org/wiki/Spiral_matrix。支持非方阵:

program SpiralMatrix;
{$APPTYPE CONSOLE}
uses
  SysUtils;

type
  TMatrix = array of array of Integer;

procedure PrintMatrix(const a: TMatrix);
var
  i, j: Integer;
begin
  for i := 0 to Length(a) - 1 do
  begin
    for j := 0 to Length(a[0]) - 1 do
      Write(Format('%3d', [a[i, j]]));
    Writeln;
  end;
end;

var
  spiral: TMatrix;
  i, m, n: Integer;
  row, col, dx, dy,
  dirChanges, visits, temp: Integer;
begin
  m := 3; // columns
  n := 3; // rows
  SetLength(spiral, n, m);
  row := 0;
  col := 0;
  dx := 1;
  dy := 0;
  dirChanges := 0;
  visits := m;
  for i := 0 to n * m - 1 do
  begin
    spiral[row, col] := i + 1;
    Dec(visits);
    if visits = 0 then
    begin
      visits := m * (dirChanges mod 2) + n * ((dirChanges + 1) mod 2) - (dirChanges div 2) - 1;
      temp := dx;
      dx := -dy;
      dy := temp;
      Inc(dirChanges);
    end;
    Inc(col, dx);
    Inc(row, dy);
  end;
  PrintMatrix(spiral);
  Readln;
end.

3 x 3:

1  2  3
8  9  4
7  6  5

4 x 3:

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

2 x 5:

 1  2
10  3
 9  4
 8  5
 7  6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矩阵和算法“螺旋” 的相关文章

  • 点集子集的最小周长凸包

    给定平面上的 n 个点 没有 3 个共线 给定数字 k 找到 k 个点的子集 使得 k 个点的凸包在 k 个点的子集的任何凸包中具有最小周长 我可以想到一个简单的方法 运行时间为 O n k k log k 找到大小为 k 的每个子集的凸包
  • Python中矩阵元素的双重求和

    基于下面的简化示例 我想在我的代码中 from sympy import import numpy as np init printing x y symbols x y mat Matrix x 1 1 y X 1 2 3 Y 10 20
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • Delphi - 如何获取 USB 可移动硬盘和记忆棒的列表?

    在我的应用程序 Delphi 中 我需要列出所有 USB 存储设备 这些可以是闪存棒or外部存储驱动器 有一个Jvcl成分JvDriveCombo 并且它有DriveType属性 问题是我是否选择DriveType Fixed那么除了外部驱
  • FreePascal x64 上系统单元函数的汇编调用

    我有一些 Delphi 汇编代码 可以在 Win32 Win64 和 OSX 32 上编译并正常工作 XE2 但是 由于我需要它在 Linux 上工作 所以我一直在考虑编译它的 FPC 版本 到目前为止 Win32 64 Linux32 6
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 根据 SSRS 矩阵中的总列计算总列的百分比

    希望在我的 SSRS 矩阵中添加一列 这将为我提供该行中总列的百分比 我正在使用以下表达式 但百分比始终为 100 我假设这是因为总计是最后评估的 所以它只是执行总计 总计 FORMAT Fields ID Value SUM Fields
  • 无法在 Document-Term-Matrix 中看到 `RTextTools::toLower()` 文本的结果

    我尝试创建一个矩阵 为此我想降低文本 为此 我使用此 R 指令 matrix create matrix tweets 1 toLower TRUE language english removeStopwords FALSE remove
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • URL路径相似度/字符串相似度算法

    我的问题是我需要比较 URL 路径并推断它们是否相似 下面我提供了要处理的示例数据 GROUP 1 robots txt GROUP 2 bot html GROUP 3 phpMyAdmin 2 5 6 rc1 scripts setup
  • 使用项目中的波形文件

    我目前只能通过将波形文件放在已编译的 exe 旁边来播放背景声音 但我实际上想要一个包含波形文件的静态可执行文件 这在Delphi XE2中可能吗 这是我的代码 SndPlaySound Raw wav SND ASYNC or SND L
  • 7 张牌扑克手牌评估器

    有谁知道评估 7 张牌扑克牌的快速算法吗 这比简单地暴力检查 7 张牌中每 21 个 5 张牌的组合更有效 Cheers Pete 我写了一篇JavaScript 核心评估方法仅使用位操作 因此速度非常快 考虑到这一点 查看 21 种组合还
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • Delphi应用程序窗口z顺序和MainFormOnTaskBar属性

    我正在维护一个最初用 Delphi 7 编写并移植到 Delphi XE 的应用程序 使用 Windows 7 我们遇到了一些问题 例如模态窗口出现在主窗口下方 以及最终无法与程序交互 因为用户需要与模态窗体交互 而这是不可能的 因为它位于
  • 如何检查是否存在可能的路径?

    我正在开发一个基于 javascript 的实验性游戏 玩家必须在二维平铺地图上移动才能退出 请随意检查这个小提琴并演奏 http jsfiddle net moonlife 74vLd 我只是随机放置障碍物 但有时障碍物会挡住玩家和出口之
  • 迭代任意大小的子集

    我可以迭代大小为 1 的子集 for int a 0 a lt size a 或大小为 2 的子集 for int a1 0 a1 lt size a1 for int a2 a1 1 a2 lt size a2 or 3 for int
  • 通过套接字发送动态数组(在记录内)?

    我正在尝试直接使用 SendBuf 将记录从服务器传输到客户端 但是 该记录有一个动态数组的成员 并且我在某处 在 SOF 中 读到 发送记录时 成员必须是静态的 固定长度 但问题是 我无法确定如何我会 将来 发送许多论点 我怎么解决这个问
  • 从一种数字系统转换为另一种数字系统后会有多少位数字

    主要问题 有多少位数字 让我解释 我有一个二进制数 11000000 十进制数是192 转换为十进制后 它有多少位 以十进制表示 在我的示例中 它是 3 位数字 但是 这不是问题 我在互联网上搜索并找到了一种用于整数部分的算法和一种用于小数
  • 在 Delphi 或 C++ Builder 中使用 Chromium Edge WebView2 [重复]

    这个问题在这里已经有答案了 既然 Microsoft Chromium Edge 已经最终确定 是否可以在 Delphi 或 C Builder 中使用它 据我了解 它是基于WebView2成分 是否有一个组件 例如TWebView2或者E
  • 从 Delphi VCL 样式获取特定字形

    我想从 VCL 样式获取特定的位图 并将其设置为按钮上的图像 它实际上是帮助问号 在位图样式编辑器中是来自表单的 btnHelp 图像 要从 VCL 样式获取视觉元素 字形 您必须使用GetElementDetails和TCustomSty

随机推荐

  • 如何使用zxing条码读取应用程序实现缩放功能?

    我正在使用 zxing 条形码读取应用程序 我需要在应用程序中添加缩放功能 以便我可以从更远的距离扫描条形码 即在扫描条形码时 应该能够缩放相机预览 我怎样才能做到这一点 Thanks 变焦并没有多大帮助 因为它是数码变焦 事实上 它往往会
  • 如何增加顶点数?

    我需要一个参数化形式matplotlib path Path 所以我用了 vertices属性 它工作得很好 只是给出的点数对于我想要的用途来说太低了 这是一段代码来说明 import numpy as np from matplotlib
  • java库从文件内容查找mime类型[重复]

    这个问题在这里已经有答案了 我正在寻找一个java库 它通过查看文件内容 字节数组 来告诉你mime类型 我发现这个项目使用 jmimemagic 它不再支持较新的文件类型 例如 MS word docx 格式 因为它现在处于非活动状态 从
  • 如何在 Visual Studio 2008 中使用 Visual Studio 2010 C++ 工具?

    如果可能的话 有人知道如何在 Visual Studio 2008 中使用 Visual Studio 2010 附带的完整 c 工具集 编译器 链接器 sdk 吗 更改 选项 gt 项目和解决方案 gt VC 目录 下监听的所有目录就足够
  • 从 Django 的 RawQuerySet 获取数据库游标

    我在 Postgres 中有一个相当大的表 20M 我尝试对其进行原始 Django 查询 tweets TweetX objects raw SELECT from twitter tweet using twittertest 我很快就
  • 仅终止 SQL Server 中的用户进程

    有些用户忘记关闭使用我们的 SQL 2014 数据库的访问查询 当发生这种情况时 它会阻止他们正在访问的表在夜间重建 有什么方法可以杀死这些用户而不杀死系统进程 据我所知 系统进程不仅限于 SPID gt 50 根据杀死用户进程spid g
  • Javascript正则表达式仅适用于整数,不以0开头但允许0

    我需要一个正则表达式来验证整数 05 and 00是不允许的 但是0被允许 目前我有这个 1 9 d 但它不允许0 感谢帮助 1 9 d 0 这就是你的模式
  • 在 Android 中将 XML 转换为 JSON 对象

    我有一个 XML 字符串 如下所示
  • jquery .not() 不工作

    我试图在每个实例上发生一些事情 除了有禁用类的地方 但 not 似乎不起作用 这是我所拥有的内容的简短版本 if this not Disabled Do Something 但是 如果我反转它 即 if this is Disabled
  • gfortran 中的清零

    有没有办法强制 gfortran 中的下溢清零 我不敢相信这是第一次有人问这个问题 但我在任何地方都找不到任何相关内容 如果这是重复的 我会承担责任 您可以使用支持 Fortran 2003 IEEE 模块的最新版本的 gfortran 来
  • 使用 Wordpress 自动完成 jQuery

    我想在 Wordpress 中使用 Jquery 自动完成和 ajax 调用从 json 文件中检索数据 这是我的代码 HTLM div class form group formComuni div
  • 如何找出 UITextField 导致 UIKeyboardWillShowNotification 的原因?

    我试图在我的应用程序中使用自定义键盘 但在尝试将其限制为一个特定的 UITextField 时遇到问题 我的代码基于这个 Xcode 项目 http billabonger net blog wp content uploads 2009
  • 如何正确使用Scala Play Anorm和Option[String]插入NULL SQL

    当 Option String 为 None 时插入它的正确方法是什么 下面的代码插入一个空字符串 这与mysql中的NULL不同 是根据partnerCode的内容预先构建SQL字符串的唯一方法吗 叹息 异常 DB withConnect
  • 如何同时使用 AVAssetReader 和 AVAssetWriter 处理多个轨道(音频和视频)?

    我知道如何使用AVAssetReader and AVAssetWriter 并成功地使用它们从一部电影中抓取视频轨道并将其转码为另一部电影 不过 我也想用音频来做到这一点 我必须创建并AVAssetExportSession在我完成初始转
  • 在android中,当方向改变时,背景图像不会改变

    我的 ActivityGroup 有一个定义的线性布局
  • Paypal 订阅 IPN - 用户多次订阅的问题

    我正在使用 PayPal 订阅和即时付款通知 IPN 来处理我网站上的订阅者 在大多数情况下 它运行良好 但我偶尔遇到一个问题 通常 如果用户取消订阅 我会等待 期限结束 subscr eot 通知 然后再禁用对我的网站的访问 因此 如果他
  • powershell 和 diskpart

    简而言之 我有一个卷需要为其分配驱动器号 使用 diskpart 现在的问题是音量不再保持不变 您输入磁盘部分 a 执行 列出卷 特定卷将是卷 0 然后 退出 再次输入并再次执行 列出卷 这次是卷 4 如此继续 现在 如果这是由人完成的 则
  • Python 无法从包中导入模块

    我有一个具有以下布局的 Flask Restful 项目 为方便起见更改了文件名 myproject init py app py common init py util py foo init py main py utilities p
  • 使用 HtmlAgilityPack 对特定子节点进行计数

    我在 HtmlAgilityPack 中使用的 XPath 选择遇到了很多麻烦 我想选择全部li嵌套在另一个元素中的元素 如果存在 li女巫有a标记为id menuItem2 这是 html 示例 div ul li a a li li a
  • 矩阵和算法“螺旋”

    我想问是否有一些算法准备好 允许我这样做 我有一个矩阵 m 列 x n 行 其中有 m x n 元素 我想给这个元素从中心开始并以螺旋形式旋转的位置 例如 对于 3x3 的矩阵 我有 9 个这样定义的元素 5 6 7 4 9 8 3 2 1