今天我们已经完成了一项任务,我们必须在图片中找到彼此相关的所有像素。画面只是绿色= 1,无颜色= 0,可以用数组来表示:C中的斑点计数功能
int grid[5][5] = {
{1, 1, 0, 0, 0},
{0, 1, 1, 0, 0},
{0, 0, 1, 0, 1},
{1, 0, 0, 0, 1},
{0, 1, 0, 1, 1},
};
我们坐在在我的组3小时,并试图解决这个(约递归第一讲座),但是我们根本无法得到它的工作。这个问题似乎是功能在某种程度上接受了在网格之外。任谁,下面的代码:
#include <stdio.h>
#include <string.h>
//Prototype
int blob_count(int y, int x, int gridCopy[][5], int sum);
int blob_count(int y, int x, int gridCopy[][5], int sum){
//Local vars
int posX, posY;
printf("\n\nX: %d - Y: %d\nposX: %d - posY: %d\nSum: %d", x, y, posX, posY, sum);
printf("\n\n{%d - %d - %d - %d - %d}\n{%d - %d - %d - %d - %d}\n{%d - %d - %d - %d - %d}\n{%d - %d - %d - %d - %d}\n{%d - %d - %d - %d - %d}\n",
gridCopy[0][0],
gridCopy[0][1],
gridCopy[0][2],
gridCopy[0][3],
gridCopy[0][4],
gridCopy[1][0],
gridCopy[1][1],
gridCopy[1][2],
gridCopy[1][3],
gridCopy[1][4],
gridCopy[2][0],
gridCopy[2][1],
gridCopy[2][2],
gridCopy[2][3],
gridCopy[2][4],
gridCopy[3][0],
gridCopy[3][1],
gridCopy[3][2],
gridCopy[3][3],
gridCopy[3][4],
gridCopy[4][0],
gridCopy[4][1],
gridCopy[4][2],
gridCopy[4][3],
gridCopy[4][4]);
//Find the position 1 behind and 1 above the starting point, and start the loop there
for(posX = -1;posX <=1; posX++){
for(posY = -1; posY <= 1; posY++){
if((y + posY) >= 0 && (x + posX) >= 0){
if((y + posY) <= 5 && (x + posX) <= 5){
if(gridCopy[posY+y][posX+x] == 1){
//Set the starting point to 0 (so it wont get calculated again)
gridCopy[posY+y][posX+x] = 0;
y = posY+y;
x = posX+x;
sum++;
blob_count(y, x, gridCopy, sum);
}
}
}
}
}
return sum;
}
int main (void)
{
int grid[5][5] = {
{1, 1, 0, 0, 0},
{0, 1, 1, 0, 0},
{0, 0, 1, 0, 1},
{1, 0, 0, 0, 1},
{0, 1, 0, 1, 1},
};
//Create a manipulateable grid
int gridCopy[5][5];
memcpy(gridCopy, grid, 5*5*sizeof(int));
//Start Positions
int start_x = 0;
int start_y = 3;
//If the starting point selected, is not 0, initiate the function:
if(grid[start_y][start_x] != 0){
printf("\nSum: %d", blob_count(start_y ,start_x, gridCopy, 0));
}
}
编辑:
我已经更新上面的代码,现在我有一个新的问题,它得到(在对方一起像素ammount的)权总和,但是当我打印出总和(在main();)时,它表示1,为什么它不会从递归函数继承到主函数?
我的问题是,它似乎即使它不应该被允许电网外去了,我不知道怎样才能得到任何接近的时候我不知道确切的问题是什么,它的旁边不这样做。 – Dennis