gpt4 book ai didi

c - 根据条件搜索查找和更改特定单元格的递归函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:27 24 4
gpt4 key购买 nike

我正在尝试用 C 语言编写一个递归函数,该函数将 NxM 矩阵作为输入,然后查找、检查特定单元格并根据场景更改其内容。

Original matrix

矩阵元素是:

   1 2 3 4 5 6 7 8
------------------
1| 1 6 7 4 4 1 2 8
2| 1 3 6 3 3 1 3 4
3| 3 4 1 5 7 8 5 1
4| 1 7 8 6 2 6 4 4
5| 7 8 1 6 2 2 7 1
6| 3 8 4 3 1 6 8 6
7| 3 8 7 5 4 6 6 6
8| 7 2 2 1 7 4 6 8

基于像上面这样的矩阵,用户给出特定单元格的位置,例如整数2的位置(5,6)。我希望递归函数检查四个方向的单元格,向上,向下,向左,向右,如果找到相同的整数则将它们更改为0。这将对所有“邻域”单元继续进行。在此示例中,位置 (5,6)、(5,5) 和 (4,5) 的所有二进制数都将变为 0。

另一个例子:用户给出位置,即整数 6 的位置 (8,7)。递归函数必须找到并更改位置 (8,7)、(7,7)、(7,8)、(7,6) 处的所有 6 ), (6,6), (6,8) 并将它们设置为 0。

    void destroy(int (*arr), int rows, int cols,int search,int rowin, int colin) //rows: total rows of matrxi, cols:total cols of matrix, rowin and colin are the x,y co ordinates of the cell that the user wants to destroy and search has the int i.e 6 ..
{
int i, j;

printf("\n");
printf("\n");

int count = 0,temp = 0;

for (j = 0; j < cols; j++) {
for (i = 0; i < rows; i++) {

if (*(arr + i*cols + j)== search) {
if (*(arr + (i-1)*cols + j) == search){//check neighborhood cell
count++; //counter to know how many similar neighborhood integers have been found
(*(arr + i*cols + j)= 0);
*(arr + (i-1)*cols + j) = 0;
destroy(int (*arr), int rows, int cols,int search, j, i) //call recursive function to check the neighborhood cells of the new position i,j

}

}
}
}
}

最佳答案

您不需要 for 循环,而是四次递归调用来检查每个邻域。

   void destroy(int *arr, int rows, int cols,int search,int rowin, int colin)
{
if (rowin>=rows || colin >= cols || rowin < 0 || colin <0)
return; //base condition

if (arr[rowin*cols+colin] == search)
{
arr[rowin*cols+colin] = 0;
destroy(arr, rows, cols, search, rowin+1, colin);
destroy(arr, rows, cols, search, rowin, colin+1);
destroy(arr, rows, cols, search, rowin-1, colin);
destroy(arr, rows, cols, search, rowin, colin-1);

}
}

关于c - 根据条件搜索查找和更改特定单元格的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106657/

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