我正在为这样的文件制作一个解析器:
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/