gpt4 book ai didi

c - 如何在数组/矩阵中获得最长的 1 行

转载 作者:太空狗 更新时间:2023-10-29 15:32:53 25 4
gpt4 key购买 nike

我的任务是在数组中找到 1 的“最长行”。水平和垂直。数组仅由 0 和 1 组成,例如如下所示:

4 4
0 1 1 1
0 1 0 1
0 1 1 0
1 0 1 0

输出应该打印“开始”1的[i][j],和“结束”1的[i][j],所以水平应该是[1][0][3][0]。

我正在使用我的 getcolor() 函数获取 [ i ][ j ] 点的值。

我考虑这个问题已经很久了,几乎花了整整一周的时间。我有一些想法,但没有一个奏效。可能是因为我是 C 的新手,对数组也是全新的。

我知道我应该遍历数组,每找到一个就应该将坐标保存到“开始”,然后转到下一个,将找到的每一个保存到“结束”。找到0后,比较长度,如果长度最大,则覆盖长度。但是我没有设法正确编写代码。有人可以帮我写代码吗?非常感谢。

编辑:这就是我所拥有的,但我才刚刚开始,它还没有用:

if(arr != NULL) {
while (j < arr->cols) {
while (i <=arr->rows) {
if (getcolor(arr, i, j) == 1) {
startI = i;
startJ = j;
break;
}
else
i++;
}
i=0;
while (i <=arr->rows) {
if (getcolor(arr, i, j) == 1) {
endI = i;
endJ = j;
}
i++;
}
i=0;

printf("start %d %d\nend %d %d\nline %d\n\n", startI, startJ, endI, endJ, line);
j++;
}
}

最佳答案

当您遇到这样的问题时,将其分解为更容易解决的更小问题会有所帮助。你的问题就是一个很好的例子。看起来您正试图一次解决整个问题,正如您所见,嵌套循环和所有问题变得有点麻烦。那么,如何使问题更简单呢?好吧,如果您可以打个响指并在一行中找到最长的一行,那就更简单了。同样,最好有一种简单的方法来获得单列中的最长行。因此,考虑编写如下函数:

int longestLineInRow(int board[][], int width, int height, int &start, int &end)
{
// returns length, with start and end being the indices of the beginning and end of the line
}

int longestLineInColumn(int board[][], int width, int height, int &start, int &end)
{
// returns length, with start and end being the indices of the beginning and end of the line
}

现在很容易找到最长行的行:您只需在每一行中找到最长的行,然后选择返回最大值的行。列也是如此。

我还没有为您解决在一行或一列中找到最长的行的问题,但这是一个更简单的任务,一旦您停止尝试一次解决整个问题,您可能可以自己解决。

关于c - 如何在数组/矩阵中获得最长的 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528602/

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