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