【问题标题】:parsing diagonal double array解析对角双数组
【发布时间】:2013-07-23 13:09:16
【问题描述】:

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

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);
}

【问题讨论】:

    标签: c algorithm parsing


    【解决方案1】:

    我建议您进行 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”等。速度上的差异不会不过,这会很多,这会使您的算法复杂化。

    【讨论】:

      【解决方案2】:

      我很想把它想象成一场突围游戏。让一个“球”在阵列内沿对角线“弹跳”。使数组的大小使球能够反弹并击中每个字母。我猜这可能不是一个非常理想的方法,并且不确定球是否有可能击中每个字母(重新角),但这可能是一种有趣的方法来测试好奇:-)

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 2021-10-14
        • 1970-01-01
        • 2018-05-15
        • 2020-12-12
        • 2013-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多