달력

42025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

#-*- coding: utf-8 -*- 

import math



class PointInfo :

    startPoint =0;

    includeY = []

    def __init__(self, x, dis):

        self.x = x

        self.dis = dis

        self.min = -1

        self.minIndex = -1

        self.NotY = []

        self.initMin()

        self.include = False

        

    def initMin(self):

        self.min = -1

        self.minIndex = -1

        for y in range(len(self.dis)) :

            if self.dis[y] == 0 :

                continue

            

            if self.checkY(y) :

                continue

            

            if self.min == -1 :

                self.min = self.dis[y]

                self.minIndex = y

                

            elif self.min > self.dis[y] :

                self.min = self.dis[y]

                self.minIndex = y

    

    def getMinTo(self):

        return self.minIndex

    

    def getMinDistance(self):

        self.initMin()

        return self.min

    

    def getFinalDistance(self):

        return self.min

    

    def setInclude(self, include = True):

        self.include = include

    

    def getInclude(self):

        return self.include

    

    def checkY(self, y):

        return y in PointInfo.includeY or y in self.NotY

    

    def addNotYList(self, y_list):

        for y in y_list :

            if not y in self.NotY :

                self.addNotY(y)

            

        self.NotY.sort()

    

    def addNotY(self, y):

        self.NotY.append(y)

    

    def delNotY(self, y):

        self.NotY.remove(y)

    

    def getNotYList(self):

        return self.NotY

   


point = [(50 ,50),(26 ,23),(50 ,95),(85 ,66),(67 ,40),(46 ,12),(6 ,2),(51 ,12),(44 ,30),(4 ,56),(61 ,14),(73 ,6),(74 ,72),(51 ,52),

         (7 ,40),(31 ,66),(8 ,16),(62 ,70),(87 ,19),(32 ,77),(56 ,67),(86 ,50),(0 ,74),(65 ,42),(19 ,97),(49 ,14),(4 ,11),(0 ,19),(17 ,37),(46 ,33),(12 ,90)]


PointInfo.startPoint = 0

dis_list = [] 

min_order = [] #[from, to]



def distance(x, y):

    dis = (x[0]-y[0])**2 + (x[1]-y[1])**2

    return math.sqrt(dis)


def checkCircle(x, y):

    count = 0

    temp_y = y

    const = False

    while True :

        const = False

        for p in min_order :

            if temp_y == p[0]:

                temp_y = p[1]

                count += 1

                const = True

                break

        

        if x == temp_y and const == True:

            break

        if const == False :

            break

        

    if count <= len(min_order) :

        if count == len(point) -1 :

            return True

        elif  x == temp_y and const == True:

            return False

        else :

            return True


    if const == False :

        return True

    

    return True


def getMinOrder(dis):

    temp_min = -1

    temp_x = -1

    

    for i in range(len(dis)) :

        if dis[i].getInclude() :

            continue

        

        if temp_min == -1 :

            temp_min = dis[i].getMinDistance()

            temp_x = i

        elif temp_min > dis[i].getMinDistance() : 

            temp_min = dis[i].getMinDistance()

            temp_x = i

    

    if checkCircle(temp_x, dis[temp_x].getMinTo()) :

        dis[temp_x].setInclude()

        dis[dis[temp_x].getMinTo()].addNotYList(dis[temp_x].getNotYList())

        dis[dis[temp_x].getMinTo()].addNotY(temp_x)

        #print("true",temp_x, " , " , dis[temp_x].getMinTo())

        return [temp_x, dis[temp_x].getMinTo()]

    else:

        dis[temp_x].addNotY(dis[temp_x].getMinTo())

        #print("false",temp_x, " , " , dis[temp_x].getMinTo())

        return [-1,-1]

    

    

    #return dis[temp_x].getMinTo()

    


for i in range(len(point)):

    temp_dis = []

    for j in range(len(point)):

        temp_dis.append(distance(point[i], point[j]))

    

    dis_list.append(PointInfo(i, temp_dis))



while True :

    temp = getMinOrder(dis_list)

    if temp[0] == -1 and temp[1] == -1 :

        continue

    min_order.append(temp)

    PointInfo.includeY.append(temp[1])

    

    if len(min_order) > len(point)-1:

        break

    


from_p = PointInfo.startPoint

sorted_p = []

while True :

    for i in range(len(min_order)) :

        if min_order[i][0] == from_p :

            sorted_p.append(min_order[i])

            from_p = min_order[i][1]

        

    if len(sorted_p) == len(point) :

        break

dis_sum = 0

for dis in dis_list :

    dis_sum += dis.getFinalDistance()

print(sorted_p)

print(dis_sum)

Posted by
|

일상/뭐 2016. 2. 8. 00:58

연휴 두번째 아침 오랜만에 느끼는 늘어짐을 즐기며 잠에서 깬후 설날 음식 장만을 돕는다. 대충 도와주고 씻고 집을 나와서 아빠에게 다녀왔다.
오고가는건 한시간 반이나 걸리는데 아빠를 본건 십오분 정도. 다른 가족들은 이미 다녀왔고 제도 지냈으니 일때문에 같이 못단 나만 따로 아빠를 보러 다녀왔다.
가만히 아빠 앞에 앉아 마음 속으로 이런저런 얘기를 하고있는데 어린 여자애 두명과 아버지로보이는 남자가 같이 들어와 내 옆에 섰다. 그러고는 아버지로보이는 남자가 "엄마한테 인사부터 하자"고 했다.
사정이 무엇이든 어떻든 너무 비정한 세상이라. 아직 나도 엄마한테 어리광쟁이인데.. 저런 어린 애들을 두고 어찌 그리됐었는지.. 마음이 아팠다. 이제 큰애는 초등학교에 들어간다고 말하고. 마지막으로 엄마에게 인사를 하고 다시 나가는 부녀들의 뒷모습은 무거운 종잇장 같은 구김으로 얼룩져 보였다.
나도 무거운 마음으로 부녀들의 행복을 바라며 아빠에게 저 애들 엄마도 잘 부탁한다고 전하고 다시 집으로 돌아왔다.

이 세상이 행복으로 모두가 느낄수 있는 행복으로 가득차길 바란다.
나에게 그런 시련이 닥친다면 나는 받아들일수가있을련지...

'일상 > ' 카테고리의 다른 글

가을  (0) 2016.11.27
Never Never Give Up  (0) 2016.05.03
네번째  (0) 2016.04.20
두번째  (0) 2016.01.28
처음  (0) 2016.01.25
Posted by
|

두번째

일상/뭐 2016. 1. 28. 00:05

하고 싶은 말을 다하고 살순 없지.
싸움은 되도록 피하는게 좋고.
서로 아끼는 마음은 숨기지 않고.
아쉬움에 서운하더라도 상대가 미안해 하는 마음이 있다면 그걸로 충분한거라고.
그래도 너무너무 기분이 안좋다고 짜증을 내어 기분이 풀리면 다행인거지, 그럴리는 없다.

볼이 금세 차가워지는 밤, 늦은 시간 퇴근하며 거리의 조명에 밤길을 의지하는 밤. 하하호호 웃음이 나는 거리에 홀로 버스정류장으러 발길을 제촉하며, 언제 끝날지 모르는 일이 너무하다 생각이들어 우울해지는 기분에 니 목소리가 있어 다행이다. 나 빼고 다 행복한거 같아 이게 뭐하는 짓인가 싶을 때도, 니 목소리가 있어 다행이다.

'일상 > ' 카테고리의 다른 글

가을  (0) 2016.11.27
Never Never Give Up  (0) 2016.05.03
네번째  (0) 2016.04.20
  (0) 2016.02.08
처음  (0) 2016.01.25
Posted by
|