我用遞回技術寫了一段代碼,但程式顯示分段錯誤錯誤。我犯了任何演算法錯誤還是我的代碼中的錯誤?
問題:
矩陣中有 R*C 個單元格,其中 R 是行數,C 是每行中的單元格數。每個細胞中可能有也可能沒有水果。有水果用1表示,沒有水果用0表示。 水果可以是不同型別的,屬于同一型別的所有水果都排列在相鄰的單元格中(有8個相鄰的單元格) : 左上、上、右上、左、右、左下、下、右下)。該程式必須列印矩陣中水果組的數量。
邊界條件: 2 <= R,C <= 50
Input:
3 5
1 0 0 0 1
0 1 0 1 1
1 0 0 0 1
Output:
2
Explanation:
The first group is indicated by the letter F,
F 0 0 0 1
0 F 0 1 1
F 0 0 0 1
The second group is indicated by the letter S,
1 0 0 0 S
0 1 0 S S
1 0 0 0 S
Input:
5 6
1 0 0 0 1 0
0 0 1 1 1 0
1 0 0 0 1 0
0 0 0 0 0 0
1 1 0 1 1 1
Output:
5
阿1必須至少相鄰的一個1的基團的被認為是該組的成員。
我的解決方案:
#include<stdio.h>
#include<stdlib.h>
int R, C, rtnval = 1;
int checkBoundary(int i, int j)
{
return (i>-1 && j>-1 && i<R && j<C);
}
void checkGroup(int arr[R][C],int i, int j)
{
if(arr[i][j]==1)
{
arr[i][j] = 0;
//top
if((checkBoundary(i-1,j)!=0) && arr[i-1][j]==1)
{
checkGroup(arr,i-1,j);
//return;
}
//top-left
if((checkBoundary(i-1,j-1)!=0) && arr[i-1][j-1]==1)
{
//arr[i-1
checkGroup(arr,i-1,j-1);
//return;
}
//top-right
if((checkBoundary(i-1,j 1)!=0) && arr[i-1][j 1]==1)
{
//arr[i-1
checkGroup(arr,i-1,j 1);
//return;
}
//bottom
if((checkBoundary(i 1,j)!=0) && arr[i 1][j]==1)
{
//arr[i 1
checkGroup(arr,i 1,j);
//return;
}
//bottom-left
if((checkBoundary(i 1,j-1)!=0) && arr[i 1][j-1]==1)
{
checkGroup(arr,i 1,j-1);
}
//bottom-right
if((checkBoundary(i 1,j 1)!=0) && arr[i 1][j 1]==1)
{
checkGroup(arr,i 1,j 1);
}
//left
if((checkBoundary(i,j-1)!=0) && arr[i][j-1]==1)
{
checkGroup(arr,i,j-1);
}
//right
if((checkBoundary(i,j 1)!=0) && arr[i][j 1]==1)
{
checkGroup(arr,i,j 1);
}
}
}
int main()
{
scanf("%d%d",&R,&C);
int arr[R][C];
for(int i=0;i<R;i ){
for(int j=0;j<C;j )
{
scanf("%d",&arr[i][j]);
}
}
int group = 0;
for(int i=0;i<R;i )
{
for(int j=0;j<C;j )
{
if(arr[i][j]==1)
{
checkGroup(arr,i,j);
group ;
}
}
}
printf("%d",group);
}
我試圖按照所有線索找到任何 1 并將它們設為 0,這樣它們就不會被誤認為是其他相鄰的1。
uj5u.com熱心網友回復:
首先,您需要checkBoundary(i, j)在檢查是否arr[i][j] == 1(以及在嘗試訪問之前)之前驗證是否回傳 true arr。
對于您的每個內部“if”陳述句也是如此,例如:
if(arr[i-1][j]==1 && (checkBoundary(i-1,j)!=0))
該checkBoundary呼叫必須被執行之前訪問arr,而不是之后。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399727.html
