Transcript Astar 하노이 탑
A* 알고리즘으로 푼 하노이 탑 변수 Ctower : 노드. ◦ vector<int> pillar[3] : 3개의 기둥 ◦ value :휴리스틱 값 Temp_Node : vector<Ctower> 임시로 한번에 생성되는 노드들 Sum_Node: vector<Ctower> 최단 경로 노드들을 저장 . 함수 bool Search_min(CTower temp1,CTower temp2) ◦ 두개의 Ctower를 비교해서, 앞의 노드가 작으면 true를 반환한다. Create_Node(CTower parent) ◦ 3개의 변수를 생성해서 휴리스틱 값 설정 void print(CTower temp); ◦ 노드안의 기둥들을 출력 int CTower::tower_value(std::vector<int> temp) ◦ 노드안의 기둥 안의 값들을 저장한다.(휴리스틱 설정에 사용) STL 사용 함수 자료형: vector . ◦ 디스크: vector<int>, 노드:vector<Ctower> find() : 부모, 조상 노드와 겹치는 노드를 찾 for_each() : 최단 경로 노드 전체 출력, 는다. ◦ 노드에 휴리스틱 값 설정 min_element() : 휴리스틱 최소 값을 가진 최단 경로 노드를 찾는다. 디스크의 출력 각 디스크들은 숫자로 표기. 디스크는 크기에 따라 숫자를 정한다 Console 창의 출력은 디스크에 따라 가로로 출력 이동 순서 (홀수 , 짝수) 디스크의 개수에 따른 이동의 순서 차이 함수의 설정 함수 포인터를 이용. 경우에 맞게 분기하도록 설정(홀수 , 짝수) for_each()에서 노드의 휴리스틱값 설정에 이용 홀수의 이동 예 휴리스틱의 가중치 case:0 case:4 case:1 case:5 case:2 case:0 case:3 case:1 홀수 디스크의 경우 짝수 디스크의 경우 6 depth 0 7 6.5 depth 1 7 7.5 depth 2 depth 3 7.5 8