【VC开源代码栏目提醒】:本文主要为网学会员提供WANGGCZ.cpp,希望对需要WANGGCZ.cpp网友有所帮助,学习一下!
// WANGGCZ.cpp: implementation of the WANGGCZ class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Designer.h"
#include "WANGGCZ.h"
#include "DIBAPI.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
WANGGCZ::WANGGCZ()
{
}
WANGGCZ::~WANGGCZ()
{
}
void WANGGCZ::QuZaDian(PICTURECOLOR m_picture_color[][LINENUM],int lianxushu)
{
//int *prect[200] = new int[LINENUM][LINENUM];
BOOL temp[LINENUM][LINENUM];
for(int i =0;i<LINENUM;i++)
for(int j =0;j<LINENUM;j++)
temp[i][j] = FALSE;
bool lab[LINENUM][LINENUM];
for(i =0;i<LINENUM;i++)
for(int j=0;j<LINENUM;j++)
lab[i][j] = false;
CPoint lab2[7];
int k=0;
for( i =0;i<LINENUM;i++)
for(int j=0;j<LINENUM;j++)
{ for(int k=0;k<m_LianXuShu;k++)
lab[lab2[k].y][lab2[k].x] = false;
this->m_LianXuShu =0;
temp[i][j] = this->QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,i,j,m_picture_color[i][j]);
//(!temp[i][j])
//xMessageBox("%d %d",i,j);
}
FILE *fp;
fp = fopen("e:\\test.txt","w+");
fprintf(fp,"%d",k);
fclose(fp);
for(i = 0;i<LINENUM;i++)
for(int j=0;j<LINENUM;j++)
{
if(temp[i][j] == FALSE)
{
if(i-1>=0 && temp[i-1][j] == TRUE)
m_picture_color[i][j] = m_picture_color[i-1][j];
else if(j-1>=0 && temp[i][j-1] == TRUE)
m_picture_color[i][j] = m_picture_color[i][j-1];
else if(i-1>=0 && j-1 >=0 && temp[i-1][j-1] == TRUE)
m_picture_color[i][j] = m_picture_color[i-1][j-1];
else if(i+1<LINENUM && temp[i+1][j] == TRUE)
m_picture_color[i][j] = m_picture_color[i+1][j];
else if(j-1>=0 && i+1<LINENUM && temp[i+1][j-1] == TRUE)
m_picture_color[i][j] = m_picture_color[i+1][j-1];
else if(j+1<LINENUM && i+1<LINENUM && temp[i+1][j+1] == TRUE)
m_picture_color[i][j] = m_picture_color[i+1][j+1];
else if(j+1<LINENUM && i-1>=0 && temp[i-1][j+1] == TRUE)
m_picture_color[i][j] = m_picture_color[i-1][j+1];
}
}
}
BOOL WANGGCZ::QuZaDian_Judge(PICTURECOLOR m_picture_color[][LINENUM], bool lab[][LINENUM],CPoint lab2[], int lianxushu,int y,int x,PICTURECOLOR spc)
{
if(this->m_LianXuShu>=lianxushu)
return TRUE;
this->m_LianXuShu++;
lab[y][x] = true;
lab2[this->m_LianXuShu-1].x = x;
lab2[this->m_LianXuShu-1].y = y;
if(m_LianXuShu>=lianxushu)
return TRUE;
else
{
if(y-1 >=0 && m_picture_color[y-1][x] == spc && lab[y-1][x] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y-1,x,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y-1 >=0 && x-1>=0 && m_picture_color[y-1][x-1]==spc && lab[y-1][x-1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y-1,x-1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(x-1 >=0 && m_picture_color[y][x-1] == spc && lab[y][x-1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y,x-1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y+1 < LINENUM && x-1>=0 && m_picture_color[y+1][x-1] == spc && lab[y+1][x-1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y+1,x-1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y+1 <LINENUM && m_picture_color[y+1][x] == spc && lab[y+1][x] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y+1,x,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y+1 <LINENUM && x+1<LINENUM && m_picture_color[y+1][x+1] == spc && lab[y+1][x+1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y+1,x+1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(x+1 <LINENUM && m_picture_color[y][x+1] == spc && lab[y][x+1] == false)
QuZaDian_Judge(m_picture_color,lab,lab2,lianxushu,y,x+1,spc);
if(m_LianXuShu>=lianxushu)
return TRUE;
if(y-1 >=0 && x+1<LINENUM && m_picture_color[y-1][x+1] == spc &