#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 = 5;
Graph G1;
Array <Array <string>> storeAry = { {"GS25    ", "30"}, {"CU      ", "60"}, {"Seven11 ", "10"}, {"MiniStop", "90"}, {"Emart24 ", "40"} };
int GS25 = 0, CU = 1, Seven11 = 2, MiniStop = 3, Emart24 = 4;

void printGraph(Graph g) { 
	print("        ");
	for (int v = 0; v < len(g); v++)
		print(storeAry[v][0]);
	println("");
	for (int row = 0; row < len(g); row++) {
		print(storeAry[row][0]+" ");
		for (int col = 0; col < len(g[row]); col++) {
			print(g[row][col]);
			print("      ");
		}
		println("");
	}
	println("");
}

int main() {
	G1 = initGraph(gSize);
	G1[GS25][CU] = 1; G1[GS25][Seven11] = 1;
	G1[CU][GS25] = 1; G1[CU][Seven11] = 1; G1[CU][MiniStop] = 1;
	G1[Seven11][GS25] = 1; G1[Seven11][CU] = 1; G1[Seven11][MiniStop] = 1;
	G1[MiniStop][Seven11] = 1; G1[MiniStop][CU] = 1; G1[MiniStop][Emart24] = 1;
	G1[Emart24][MiniStop] = 1;

	println("## 편의점 그래프 ##\n");
	printGraph(G1);

	Array <int> stack;
	Array <int> visitedAry; // 방문한 편의점

	int current = 0;			// 시작 편의점
	int maxStore = current;		// 최대 개수 편의점 번호(GS25)
	int maxCount = atoi(storeAry[current][1].c_str()); // 편의점에 있는 허니버터 숫자
	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);
			if (atoi(storeAry[current][1].c_str()) > maxCount) {
				maxCount = atoi(storeAry[current][1].c_str());
				maxStore = current;
			}
		}
		else { // 다음에 방문할 편의점이 없는 경우
			current = stack[len(stack) - 1];
			stack.pop_back();
		}
	}
	print("허니버터칩 최대 보유 편의점(개수) -->");
	print(storeAry[maxStore][0] + "(" + storeAry[maxStore][1] + ")");
}