[알고리즘 C언어] 6.1.1 순열 알고리즘의 경험(Heuristic)정보 설계

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

여기에서는 동적 배열을 이용하여 꺼낸 공과 꺼내지 않은 공의 집합을 표현할게요. 동적 배열과 연결리스트, 스택에 관한 코드 설명은 이 책에서는 하지 않습니다. 디딤돌 자료구조 (C언어)를 참고하세요. 이에 관한 소스 코드는 6.1.4 순열 알고리즘 소스 코드에 있습니다.

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