横竖三连
greex 2015-02-17 03:03:05
typedef std::vector<char> VEC_OBJ_LINE;
typedef std::vector<VEC_OBJ_LINE> VEC_OBJ_ALL;
void printObj(const VEC_OBJ_ALL& allData)
{
for (VEC_OBJ_ALL::const_iterator itr1=allData.begin();itr1!=allData.end();++itr1)
{
const VEC_OBJ_LINE& line=*itr1;
for (VEC_OBJ_LINE::const_iterator itr2=line.begin();itr2!=line.end();++itr2)
{
std::cout<<*itr2;
}
std::cout<<std::endl;
}
}
string toString(const VEC_OBJ_LINE& line)
{
std::ostringstream osm;
for (VEC_OBJ_LINE::const_iterator itr2=line.begin();itr2!=line.end();++itr2)
{
osm<<*itr2;
}
return osm.str();
}
bool hasExitThreeObj(const VEC_OBJ_LINE& line,const VEC_OBJ_LINE& oldLen)
{
for(VEC_OBJ_LINE::const_iterator itr1=line.begin();itr1!=line.end();++itr1)
{
unsigned int uNum=0;
for(VEC_OBJ_LINE::const_iterator itr2=line.begin();itr2!=line.end();++itr2)
{
if (*itr1==*itr2)
{
++uNum;
if (uNum>=3)
{
std::cout<<itr2-line.begin()<<"=="<<toString(oldLen)<<std::endl;
//return true;
}
}
else
{
uNum=0;
}
}
}
return false;
}
bool listTwoObj(const VEC_OBJ_LINE& line1,const VEC_OBJ_LINE& line2)
{
int uNum=4;
while (uNum>=0)
{
VEC_OBJ_LINE lineL(line1);
lineL.at(uNum)=line2.at(uNum);
if (hasExitThreeObj(lineL,line1))
{
return true;
}
VEC_OBJ_LINE lineR(line2);
lineR.at(uNum)=line1.at(uNum);
if (hasExitThreeObj(lineR,line2))
{
return true;
}
--uNum;
}
return false;
}
void test(const std::string& strValue)
{
unsigned int uV=0;
VEC_OBJ_ALL allData;
for (int i=0;i<5;++i)
{
VEC_OBJ_LINE line;
for (int j=0;j<5;++j)
{
char ch=strValue.at(uV++);
line.push_back(ch);
}
allData.push_back(line);
}
printObj(allData);
VEC_OBJ_ALL::iterator itr1=allData.begin();
VEC_OBJ_ALL::iterator itr2=itr1;++itr2;
while (itr2!=allData.end())
{
listTwoObj(*itr1,*itr2);
++itr1;
++itr2;
}
for (int i=0;i<4;++i)
{
VEC_OBJ_LINE lineL;
VEC_OBJ_LINE lineR;
for (int j=0;j<5;++j)
{
const VEC_OBJ_LINE &line=allData.at(j);
lineL.push_back(line.at(i));
lineR.push_back(line.at(i+1));
}
listTwoObj(lineL,lineR);
}
}