算法设计题目:求一线段的连通线段
‘a’的连通线段为‘b’,'c','d',
'e'的连通线段为‘f’,'g'
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define TRUE 1
#define FALSE 0
int g_num = 0;
class MyPoint
{
public:
MyPoint(){};
MyPoint(int x, int y)
{
nX = x;
nY = y;
}
int GetX(){return nX;}
int GetY(){return nY;}
~MyPoint(){};
private:
int nX;
int nY;
};
class MyLine
{
public:
MyLine(MyPoint pt1,MyPoint pt2,char lable,bool flag)
{
firstPoint = pt1;
lastPoint = pt2;
cLable = lable;
bFlag = flag;
}
MyLine(MyLine&RefLine)
{
firstPoint = RefLine.firstPoint;
lastPoint = RefLine.lastPoint;
cLable = RefLine.cLable;
bFlag = RefLine.bFlag;
}
~MyLine(){};
MyPoint GetMyfirstPoint(){return firstPoint;}
MyPoint GetMylastPoint(){return lastPoint;}
char GetLineLable(){return cLable;}
void SetFlag(bool flag)
{
bFlag = flag;
}
bool GetFlag()
{
return bFlag;
}
private:
MyPoint firstPoint;
MyPoint lastPoint;
char cLable;
bool bFlag;
};
bool pointCmp(MyPoint pt1,MyPoint pt2)
{
if (pt1.GetX() == pt2.GetX() && pt1.GetY() == pt2.GetY())
{
return TRUE;
}
return FALSE;
}
bool lineCmp(MyLine line1, MyLine line2)
{
if (pointCmp(line1.GetMyfirstPoint(), line2.GetMyfirstPoint())||pointCmp(line1.GetMyfirstPoint(),line2.GetMylastPoint())||
pointCmp(line1.GetMylastPoint(),line2.GetMyfirstPoint())||pointCmp(line1.GetMylastPoint(),line2.GetMylastPoint()))
{
return TRUE;
}
return FALSE;
}
void deleteLine(MyLine lineBuf[],int &num,MyLine line)
{
for (int i=0; i<num; i++)
{
if (line.GetLineLable() == lineBuf[i].GetLineLable())
{
lineBuf[i] = lineBuf[i++];
}
}
num--;
}
char* searchline(MyLine &line, MyLine lineVector[],int linenum)
{
int i = 0;
while (i<linenum)
{
if (!lineVector[i].GetFlag() && line.GetLineLable() != lineVector[i].GetLineLable())
{
line.SetFlag(TRUE);
if (lineCmp(line,lineVector[i]))
{
printf("%c",lineVector[i].GetLineLable());
searchline(lineVector[i],lineVector,linenum);
}
}
i++;
}
return NULL;
}
int main(int argc, char* argv[])
{
int i = 6;
MyPoint pt1(0,0),pt2(1,1),pt3(2,2),pt4(3,3),pt5(4,4),pt6(5,5),pt7(6,6),pt8(7,7),pt9(8,8);
MyLine lineA(pt1,pt2,'a',FALSE),lineB(pt2,pt3,'b',FALSE),lineC(pt2,pt4,'c',FALSE),lineD(pt4,pt5,'d',FALSE),lineE(pt6,pt7,'f',FALSE),lineF(pt8,pt9,'g',FALSE);
MyLine lineBuf[6] = {lineA,lineB,lineC,lineD,lineE,lineF};
// while (i--)
// {
printf("%c relative:",lineBuf[4].GetLineLable());
searchline(lineBuf[4],lineBuf,6);
// }
return 0;
}