#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;
}

// 전역 변수 선언 부분
int gSize = 6;
Graph G1;
Array <string> nameAry = { "문별", "솔라", "휘인", "쯔위", "선미", "화사" };
int 문별 = 0, 솔라 = 1, 휘인 = 2, 쯔위 = 3, 선미 = 4, 화사 = 5;

bool findVertex(Graph g, int findVtx) {
	Array <int> stack;
	Array <int> visitedAry;

	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 (g[current][vertex] != 0) {
				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();
		}
	}

	if (isInArray(visitedAry, findVtx))
		return true;
	else
		return false;
}

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

	for (int name = 0; name < gSize; name++) {
		if (findVertex(G1, name)) {
			println(nameAry[name] + " 연락이 됨 ^^");
		}
		else {
			println(nameAry[name] + " 연락이 안 됨ㅠ");
		}
	}
}