c - 解析对角双数组

标签 c algorithm parsing

我正在为这样的文件制作一个解析器:

intrepideg
xtdcvmhgze
yrwhoejkpn
minusculet
isnqdhivpi
ntznyafhel
ceamgnqgug
erpoxtavrf
gwaupsgwsd
kyqtendrme

这个想法是从用户那里接收一个字符串,然后在水平、垂直和对角线上搜索它。 我在对角线方式上苦苦挣扎,因为我在寻找使更少迭代成为可能的最佳方式。 我应该从双阵列的每个角开始制作 4 段,找到双阵列的中间,然后从开始制作 2 段吗?什么是最好的算法?

这是我的程序的核心功能:

t_inco          search_all(t_inco inco)
{
  int           i;
  int           f;
  int           j;

  i = 0;
  f = 0;
  j = 0;
  while (inco.map[i])
    {
      while(inco.map[i][f])
        {
          if (inco.map[i][f] == inco.wd[0])
            {
              if(find_cases_h(inco, i, f))
                {
                  inco = get_cases(inco, i, f, 1);
                  return(inco);
                }
              else if(find_cases_v(inco, i, f))
                {
                  inco = get_cases(inco, i, f, 2);
                  return(inco);
                }
              else if(find_cases_d(inco, i, f))
                {
                  inco = get_cases(inco, i, f, 3);
                  return(inco);
                }
            }
          f++;
        }
      i++;
      f = 0;
    }
  return(inco);
}

最佳答案

我建议您进行 4 次传球,每一次都从不同的角开始。例如,给定您的数组:

intrepideg
xtdcvmhgze
yrwhoejkpn
minusculet
isnqdhivpi
ntznyafhel
ceamgnqgug
erpoxtavrf
gwaupsgwsd
kyqtendrme

从左上角开始,您将在从右到左向下移动的对角线上搜索。所以:“i”,“nx”,“tty”,“rdrm”等。在右上角搜索“g”,“ee”,“dzn”等:从左向下移动的对角线对。

虽然这更多次遍历数组,但与尝试在一次数组扫描中搜索所有四个对角线相比,它的代码要简单得多。

您可以分两次完成。毕竟,搜索从右到左向下移动的对角线只是对角线从左到右向上移动的反转。因此,您可以为第一遍设置迭代以搜索“i”、“nx”、“xn”、“tty”、“ytt”、“rdrm”、“mrdr”等。速度上的差异不会但是,它会使您的算法复杂化。

关于c - 解析对角双数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17811134/

相关文章:

c - 算术运算的处理时间不成比例 [C]

python - 查找边权重为 1 的所有对的距离的最佳算法

c# - 如何从查询中删除所有参数的值

android - 使用 FFMPEG 调整视频帧大小

C: 无法在文件上写入数据

java - 遍历整个树结构的算法

java - 双向链表中给定节点之间的反向链表 - 算法

ANTLR v4 的 C 语法

xml - 在保留格式的同时从文件读取 XML 和从文件读取 XML

c - 如何强制 scanf 将\n 字符作为输入?