问题描述:给定一个二维数组,其中@的位置是统计的入口,统计从此入口开始,相连通的'b '的个数。

#include "stdafx.h"
#include <vector>
#include<iostream>
#include <string>
using namespace std;

//统计函数

int countB(char(*c)[7],int i,int j)
{

int self=0,l=0,r=0,u=0,d=0;

if(c[i][j]=='b'||c[i][j]=='@')
{
if(c[i][j]=='b')self++;
c[i][j]='w';//避免重复

if(j<5)r=countB(c,i,(j+1));//向右
else r=0;//到达右边界
if(j>0)l=countB(c,i,(j-1));//向左
else l=0;//到达左边界
if(i>0)u=countB(c,(i-1),j);//向上
else u=0;//到达上边界
if(i<5)d=countB(c,(i+1),j);//向下
else d=0;//到达下边界
return self+r+l+u+d;

}
else return 0;

}
void main()
{
//为了简化输入,用一个给定的二维数组进行测试,实际上用vector更好一些
char arr[6][7]={{'w','w','b','b','w','w'},
{'w','b','w','w','b','b'},
{'b','w','@','b','b','b'},
{'b','b','b','b','w','w'},
{'w','w','b','b','w','b'},
{'b','b','w','w','b','w'}};

int num=0;
for(int i=0;i<6;i++)
for(int j=0;j<6;j++)
{if(arr[i][j]=='@')
{
num=countB(&arr[0],i,j);
i=6,j=6;//跳出循环

}
}

cout<<"num:"<<num<<endl;

}

个人原创,转载请注明出处