头文件:
Block.h
#pragma once
#include "stdafx.h"
#include <iostream>
using namespace std;
class Block
{
public:
Block(char compareChar,int rowCount, int colCount,char** Array);
int Calculate(int* y, int* x);
private:
char compare;
int row;
int col;
char** Arr;
char roundElement[8][2]= {
{ -1,-1 },{ -1,0 },{ -1,1 },
{ 0,-1 },{ 0,1 },
{ 1,-1 },{ 1,0 },{ 1,1 }
};
int GetCount(int r, int c);
};
源文件:
Block.cpp
#include"stdafx.h"
#include "Block.h"
//构造函数,初始化数组
Block::Block(char compareChar, int rowCount, int colCount, char ** Array)
{
compare = compareChar;
row = rowCount;
col = colCount;
Arr = Array;
}
//计算最大块大小
int Block::Calculate(int* y, int* x)
{
int maxCount = 0;
//i行
for (int i = 0; i < row; i++)
{
//j列
for (int j = 0; j < col; j++)
{
if (Arr[i][j] == compare)
{
int count = GetCount(i, j);
if (count > maxCount)
{
maxCount = count;
*y = i;
*x = j;
}
}
}
}
return maxCount;
}
//递归获取Count
int Block::GetCount(int r,int c)
{
int Count = 1;
Arr[r][c] = 18;
for (int i = 0; i < 8; i++)
{
int y = r + roundElement[i][0];
int x = c + roundElement[i][1];
if (y >=0 && y < row&&x >=0 && x < col&&Arr[y][x] == compare)
{
Count += GetCount(y,x);
}
}
return Count;
}
Main文件:
// LinkBlock.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Block.h"
#include <iostream>
using namespace std;
char **GetArray()
{
int row = 12;
int col = 7;
char **cArray;
cArray= new char*[row];
for (int i = 0; i < row; i++)
{
cArray[i] = new char[col];
}
for (int i = 0; i < 4; i++)
{
cArray[3 * i][0] = 'A';
cArray[3 * i][1] = 'B';
cArray[3 * i][2] = 'A';
cArray[3 * i][3] = 'B';
cArray[3 * i][4] = 'B';
cArray[3 * i][5] = 'A';
cArray[3 * i][6] = 'A';
cArray[3 * i + 1][0] = 'A';
cArray[3 * i + 1][1] = 'A';
cArray[3 * i + 1][2] = 'B';
cArray[3 * i + 1][3] = 'B';
cArray[3 * i + 1][4] = 'B';
cArray[3 * i + 1][5] = 'A';
cArray[3 * i + 1][6] = 'B';
cArray[3 * i + 2][0] = 'B';
cArray[3 * i + 2][1] = 'A';
cArray[3 * i + 2][2] = 'A';
cArray[3 * i + 2][3] = 'B';
cArray[3 * i + 2][4] = 'B';
cArray[3 * i + 2][5] = 'A';
cArray[3 * i + 2][6] = 'A';
}
return cArray;
}
int main()
{
int row = 12;
int col = 7;
char** cArray = GetArray();
Block* b=new Block('A',row,col,cArray);
int x = 0;
int y = 0;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout << cArray[i][j] << " ";
}
cout << endl;
}
int maxCount= b->Calculate(&y, &x);
cout << "最大块数:" << maxCount << " 行数:" << y << " 列数:" << x << endl;
cin >> x;
delete(cArray);
delete(b);
delete(&x);
delete(&y);
return 0;
}
测试结果: