#include "..\CookHeader.h"

typedef  Array <Array <int>> Graph;
Graph initGraph(int size) {
    Graph G;
    Array <int> tmpAry;
    for (int i = 0; i < size; i++) {
        tmpAry.clear();
        for (int k = 0; k < size; k++)
            tmpAry.push_back(0);
        G.push_back(tmpAry);
    }
    return G;
}

Graph G1;
Array <string> nameAry = { "문별", "솔라", "휘인", "쯔위", "선미", "화사" };
int 문별 = 0, 솔라 = 1, 휘인 = 2, 쯔위 = 3, 선미 = 4, 화사 = 5;
Array <int> stack;
Array <int> visitedAry;

int main() {
    int gSize = 6;
    Graph G1 = initGraph(gSize);
    G1[문별][솔라] = 1; G1[문별][휘인] = 1;
    G1[솔라][문별] = 1; G1[솔라][쯔위] = 1;
    G1[휘인][문별] = 1; G1[휘인][쯔위] = 1;
    G1[쯔위][솔라] = 1; G1[쯔위][휘인] = 1; G1[쯔위][선미] = 1; G1[쯔위][화사] = 1;
    G1[선미][쯔위] = 1; G1[선미][화사] = 1;
    G1[화사][쯔위] = 1; G1[화사][선미] = 1;

    int current = 0;  // 시작 정점
    stack.push_back(current);
    visitedAry.push_back(current);

    while (len(stack) != 0) {
        int next = -1;
        for (int vertex = 0; vertex < gSize; vertex++) {
            if (G1[current][vertex] == 1) {
                if (isInArray(visitedAry, vertex)) // 방문한 적이 있는 정점이면 탈락
                {
                }
                else { // 방문한 적인 없으면 다음 정점으로 지정
                    next = vertex;
                    break;
                }
            }
        }
        if (next != -1) { // 다음에 방문할 정점이 있는 경우
            current = next;
            stack.push_back(current);
            visitedAry.push_back(current);
        }
        else { // 다음에 방문할 정점이 없는 경우
            current = stack[len(stack) - 1];
            stack.pop_back();
        }
    }

    print("방문 순서-->");
    for (int i = 0; i < len(visitedAry); i++)
        print(nameAry[visitedAry[i]]);

}