7.1.1 순열 알고리즘의 경험(Heuristic)정보 설계

바구니에서 공을 꺼내는 순열 문제의 경험 정보는 꺼내지 않은 공의 집합과 꺼낸 공의 집합이라 할 수 있습니다.

여기에서는 5장에서 구현한 동적 배열을 이용하여 꺼낸 공과 꺼내지 않은 공의 집합을 표현할게요.

typedef struct _Heuristic Heuristic;
struct _Heuristic
{
    Array *ori_bucket;
    Array *out_bucket;
};

초기 경험 정보를 생성하는 함수를 제공합시다. 이 함수에는 초기 바구니에 있는 공의 집합을 입력 인자로 전달받아야 합니다.

Heuristic *MakeInitHeuristic(Array *bucket);

동적으로 생성한 경험 정보를 소멸하는 함수도 제공합시다.

void DeleteHeuristic(Heuristic *now);

현재 경험 정보에서 다음 경험 정보들을 조사하는 함수도 제공해야 합니다. 입력 인자로 현재 경험 정보와 다음 경험 정보들을 보관할 동적 배열을 받기로 할게요.

void FindNextHeuristics(Heuristic *now, Array *next_heus);

원하는 결론에 도달했는지 확인하기 위해 꺼낸 공의 개수를 반환하는 함수도 제공합시다.

int GetOutCount(Heuristic *now);

그리고 꺼낸 공의 목록을 출력하는 함수도 제공합시다.

void ViewHeuristic(Heuristic *now);