gpt4 book ai didi

c++ - 在二维数组中垂直和水平搜索

转载 作者:太空狗 更新时间:2023-10-29 23:14:48 25 4
gpt4 key购买 nike

基本上,我想进行水平搜索和垂直搜索。现在我正在这样做:

void checkHorizontal()
for (int iii = 1; iii<Row;; iii++)
{
for (int jjj = 1; jjj<Col; jjj++) //for every col
{
if(Array[iii][jjj]==sign)
{
//do something
}
else
{
//do something else
}

}
}

void checkVertical()
for (int iii = 1; iii<Col;; iii++)
{
for (int jjj = 1; jjj<Row; jjj++) //for every row
{
if(Array[jjj][iii]==sign)
{
//do something
}
else
{
//do something else
}

}
}

然而,除了for循环中的check函数和if语句外,其他都是一样的。而且我想减少重复代码,所以我能做些什么来制作更通用的函数,调用者只需要传递说明他们是想进行水平搜索还是垂直搜索(即 void check(string mode) 和调用者只是 check("Vertical"))

我知道我可以通过执行以下操作在 for 循环内通过检查函数:

if (mode == "Horizontal")
{
firstBoundary = cGameBoard.m_nRow;
secondBoundary = cGameBoard.m_nCol;
}
else if (mode == "Vertical")
{
firstBoundary = cGameBoard.m_nCol;
secondBoundary = cGameBoard.m_nRow;
}
void check(string mode)
for (int iii = 1; iii<firstBoundary;; iii++)
{
for (int jjj = 1; jjj<secondBoundary; jjj++)
{
if(Array[jjj][iii]==sign)
{
//do something
}
else
{
//do something else
}

}
}

问题是 if 语句,不知道交换数组的最佳方法,除了执行函数调用来执行此操作。我的建议:

bool if(string mode, int& iii, int &jjj, array,string sign)
{
if(mode=="Horizontal")
return array[iii][jjj]==sign;
else if(mode=="Vertical")
return array[jjj][iii]==sign;
}

然后在if语句中调用这个函数

最佳答案

您的解决方案应该有效。

void check(bool dir){  // Using a bool will have better performance for checking the mode than string comparisons. Especially since you only have two directions
size_t iEnd = (dir)? cols : rows;
size_t jEnd = (dir)? rows : cols;
for (size_t i = 0; i < iEnd; ++i){
for (size_t j = 0; j < jEnd; ++j){
if(cond(i, j, dir)){
// Do something
} else {
// Do something else
}
}
}
}

bool cond(const size_t& i, const size_t& j, bool dir){
if (dir){
return array[i][j] == sign;
} else {
return array[j][i] == sign;
}
}

你可以通过使用递归获得同样的结果

void check(size_t i, size_t j, bool dir){
if (ROW + COL - (i+j) == 1) return; /* end recursion */
if (i == ROW) return check(0, j+1, dir);
if (j == COL) return check(i+1, 0, dir);
if (array[i][j] == sign){
// Do Something
} else {
// Do Something Else
}
if (dir)
return check(i+1, j, dir);
return check(i, j+1, dir);
}

你的编译器应该能够弄清楚这只使用尾递归,你不必担心堆栈帧限制。

关于c++ - 在二维数组中垂直和水平搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31979297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com