题目
在一个机房中,服务器的位置标识在 n*m 的整数矩阵网格中,1 表示单元格上有服务器,0 表示没有。如果两台服务器位于同一行或者同一列中紧邻的位置,则认为它们之间可以组成一个局域网。
请你统计机房中最大的局域网包含的服务器个数。
输入描述
第一行输入两个正整数,n和m,0<n,m<=100
之后为n*m的二维数组,代表服务器信息
输出描述
最大局域网包含的服务器个数。
用例
输入 | 2 2 1 0 1 1 |
输出 | 3 |
说明 | [0][0]、[1][0]、[1][1]三台服务器相互连接,可以组成局域网 |
#include <stdio.h>
#include <map>
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
#include <math.h>
using namespace std;
class CNetServer
{
public:
unsigned int m_uiX;
unsigned int m_uiY;
int m_ArryServer[100][100];
int m_iMaxServer;
CNetServer(int iX,int iY,void* pBuff)
:m_uiX(iX),m_uiY(iY)
{
m_iMaxServer = 0;
memset(m_ArryServer,0x00,100*100*sizeof(int));
if (pBuff != 0)
{
for (int i = 0; i < m_uiY;i++)
{
memcpy(m_ArryServer[i],pBuff,m_uiX*sizeof(int));
}
}
for (int xCur = 0;xCur < m_uiX;xCur++)
{
for (int yCur = 0;yCur < m_uiX;yCur++)
{
int iCountServer = 0;
iCountServer = FindCurPointNet(xCur,yCur,iCountServer);
if (iCountServer > m_iMaxServer)
{
m_iMaxServer = iCountServer;
}
}
}
}
protected:
int FindCurPointNet(int iXpos,int iYpos,int iCount)
{
if (!IsPos(iXpos,iYpos) || !HaveServer(iXpos,iYpos))
{
return iCount;
}
iCount += 1;
m_ArryServer[iXpos][iYpos] = 0;
//top
iCount = FindCurPointNet(iXpos,iYpos + 1,iCount);
//bottom
iCount = FindCurPointNet(iXpos,iYpos - 1,iCount);
//left
iCount = FindCurPointNet(iXpos - 1,iYpos,iCount);
//right
iCount = FindCurPointNet(iXpos + 1,iYpos,iCount);
return iCount;
}
bool IsPos(int iXpos,int iYpos)
{
bool bRet(true);
if (iXpos >= m_uiX || iXpos < 0)
{
bRet = false;
}
if (iYpos >= m_uiY || iYpos < 0)
{
bRet = false;
}
return bRet;
}
bool HaveServer(int iXpos,int iYpos)
{
if (IsPos(iXpos,iYpos))
{
if (m_ArryServer[iXpos][iYpos] == 1)
{
return true;
}
}
return false;
}
private:
};
int main()
{
int iX(0);
int iY(0);
cin >> iX >> iY;
if (iX < 1 || iY < 1)
{
cout << "error input" << endl;
}
int* pbuff = new int[iX*iY];
for (int iCur = 0;iCur < iX*iY; iCur++)
{
cin >> *(pbuff + iCur);
if (pbuff[iCur] >= 1)
{
pbuff[iCur] = 1;
}
else
{
pbuff[iCur] = 0;
}
}
CNetServer oNetServer(iX,iY,pbuff);
cout << oNetServer.m_iMaxServer << endl;
return 0;
}