C/C++ code#include "stdio.h"
#define M 5
#define N 4
int myfind(int a[M][N],int b[M][N],int m,int n)
{
int res=1;
if (m>0)
{
if (b[m-1][n]==0 && a[m-1][n]==a[m][n])
{//up
b[m-1][n]=1;
res+=myfind(a,b,m-1,n);
}
}
if (m
{
if (b[m+1][n]==0 && a[m+1][n]==a[m][n])
{//down
b[m+1][n]=1;
res+=myfind(a,b,m+1,n);
}
}
if (n>0)
{
if (b[m][n-1]==0 && a[m][n-1]==a[m][n])
{//left
b[m][n-1]=1;
res+=myfind(a,b,m,n-1);
}
}
if (n
{
if (b[m][n+1]==0 && a[m][n+1]==a[m][n])
{//right
b[m][n+1]=1;
res+=myfind(a,b,m,n+1);
}
}
return res;
}
int find(int a[M][N],int m,int n)
{
int b[M][N];
for (int i=0;i
{
for (int j=0;j
{
b[i][j]=0;
}
}
b[m][n]=1;
return myfind(a,b,m,n);
}
int main()
{
int a[M][N]={
{1,1,1,3},
{1,2,3,4},
{2,1,3,3},
{1,3,3,3},
{1,2,3,2}
};
int count=find(a,3,2);
printf("%d\n",count);
return 0;
}
------解决方案--------------------C/C++ code可以用递归,类似图形填充的种子填充方法
void fill(int x, int y)
{
int t = getpixel(x, y);
if(t != RED && t != GREEN)
{
putpixel(x, y, GREEN);
fill(x + 1, y);
fill(x - 1, y);
fill(x, y + 1);
fill(x, y - 1);
}
}