一道经典的面试题

算法设计题目:求一线段的连通线段


‘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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值