void MatrixGraph::displayMatrix(MatrixGraph& mg) { IoHandler ioh; string fileName = ioh.getString("무방향 그래프가 저장된 파일명을 입력하시오.(종료는 quit) : "); if (fileName == "quit") { exit(1); } FileHandler fh; fh.loadMatrixGraph(fileName, mg); ioh.putString("입력된 그래프의 인접 행렬 표현"); ioh.putNewLine(); mg.printMatrix(); ioh.putNewLine(); mg.dfs(); ioh.putNewLine(); mg.bfs(); ioh.putNewLine(); }
void Taskmanager::printMenu(Day &day, Day &dDay) { IoHandler ioh; while (true) { try { printDay(day, dDay); string inputData = ioh.inputMenu("날짜 이동(년월일, (다음날)+, (전날)-), D-day 계산(+/- 날짜), 종료(Q) : "); if (inputData == "q" || inputData == "Q") { break; } int menu = checkInputData(inputData); switch (menu) { //하루이동 case ONE_DAY_MOVE: { oneDayMove(day, dDay, inputData); break; } //DDay지정 case SET_D_DAY: { setDDay(day, dDay); break; } //지정날짜이동 case SET_DAY: { setDay(day, dDay, inputData); break; } default: { ioh.putMsg("잘못된 기능 입력"); ioh.putNewLine(); break; } } } catch (string error) { ioh.putMsg(error); ioh.putNewLine(); } ioh.putNewLine(); } ioh.putNewLine(); }
void SetsGraph::setGraph(int numberOfElements) { if (numberOfElements < 2) { IoHandler ioh; ioh.putString("Must have at least 2 elements."); ioh.putNewLine(); } size = numberOfElements; parent = new int[size]; for (int i = 0; i < numberOfElements; ++i) { parent[i] = -1; // 모든 원소가 집합 } }
void MatrixGraph::printMatrix() { IoHandler ioh; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (adjMatrix[i][j] == true) { ioh.putInteger(1); ioh.putString(" "); } else { ioh.putInteger(0); ioh.putString(" "); } } ioh.putNewLine(); } }
void Taskmanager::printDay(Day &day, Day &dDay) { IoHandler ioh; ioh.putMsg("[현재날짜] "); ioh.printDay(day); if (isExistDDay) { ioh.putMsg("[D"); ioh.putChar(oper); ioh.putNum(difference); ioh.putMsg("] "); ioh.printDay(dDay); } else { ioh.putMsg("[D-day 없음]"); } ioh.putNewLine(); }
int main() { StudentList stdList; BookList bookList; LendList lendList; IoHandler ioh; ioh.loadStd("std.txt", stdList); ioh.loadBook("book.txt", bookList); ioh.loadLend("lend.txt", lendList); Taskmanager tm(stdList, bookList, lendList); int menu; while (true) { menu = ioh.putMenu(); switch (menu) { case 1: //대출 { ioh.putMsg("학번과 도서명 입력 --- "); int stdNum = ioh.inputNum(); string bookName = ioh.inputMsg(); tm.lendBook(stdNum, bookName); ioh.putNewLine(); break; } case 2: //반납 { ioh.putMsg("학번과 도서명 입력 --- "); int stdNum = ioh.inputNum(); string bookName = ioh.inputMsg(); tm.returnBook(stdNum, bookName); ioh.putNewLine(); break; } case 3: //현황 { tm.printLendList(); break; } case 4: //종료 { tm.saveLendList("lend.txt"); ioh.putMsg("대출 - 반납 상황을 저장하고 종료합니다."); return 0; } default: { ioh.putMsg("1 ~ 4중에 선택하세요."); ioh.putNewLine(); break; } } } }
void Taskmanager::startHangmanGame(HangmanGame &hg, WordList &wordList) { IoHandler ioh; char a; hg.makeQuestion(wordList); string lowerQuestion = upperToLower(hg.getQuestionWord()); string lowerInputData; hg.setUsableLetter(); hg.setFindLetter(); hg.endGame(); //hangmancount = 0 while (true) { hg.putGameHeader(currentUser); hg.putHangman(); hg.putQuestion(); hg.putUsableLetter(); ioh.putNewLine(); ioh.putNewLine(); lowerInputData = upperToLower(ioh.inputLetter("알파벳이나 전체 단어를 입력하세요. [A - z 또는 단어] : ")); hg.setInputWord(lowerInputData); if (isOverlap(hg)) { cin >> a; continue; } if (hg.isCorrect() == true) { if (hg.isWin() == true) { hg.putGameHeader(currentUser); hg.putHangman(); hg.putQuestion(); hg.putUsableLetter(); ioh.putNewLine(); ioh.putNewLine(); ioh.putMsg("단어찾기에 성공하셨습니다!! 계속하시려면 아무 키나 입력하세요."); cin >> a; currentUserScore(true); break; } } else { if (hg.isWin() != true && hg.isLose() == true)
void MatrixGraph::dfs() { bool* visit = new bool[size]; memset(visit, false, size); Stack<int> tstack; Stack<int> stack; int visited = 0; // 0번 vertex부터 출발 visit[visited] = true; stack.Push(visited); tstack.Push(visited); int connecctComponent = 1; // 연결요소 개수 IoHandler ioh; ioh.putString("인접행렬 + DFS"); ioh.putNewLine(); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (adjMatrix[i][j] == true) // 간선이 있으면 { if (visit[j] == false) // 방문하지 않은 곳이면 { visit[j] = true; stack.Push(j); // 방문한 곳 Push tstack.Push(j); int temp = i; i = j; j = temp; j = j - 1; } } } if (stack.IsEmpty() == false) { i = stack.Top(); i = i - 1; stack.Pop(); continue; } while (1) { // 출력하기 위해 임시 스텍에 연결요소를 옮겨담음 stack.Push(tstack.Top()); tstack.Pop(); if (tstack.IsEmpty() == true) { break; } } ioh.putString("연결요소"); ioh.putInteger(connecctComponent++); ioh.putString(" - "); while (1) { // 출력 ioh.printConnectedComponent(stack.Top()); stack.Pop(); if (stack.IsEmpty() == true) { break; } } ioh.putNewLine(); // 종료 조건 int flag = 0; for (int j = 0; j < size; j++) { if (visit[j] == true) { flag++; } } if (flag == size) { break; } // 방문하지 않은 vertex로 이동 for (int j = 0; j < size; j++) { if (visit[j] == false) { visit[j] = true; tstack.Push(j); i = j; i = i - 1; break; } } } // for end delete[] visit; return; }
void MatrixGraph::bfs() { bool* visit = new bool[size]; memset(visit, false, size); Queue<int> queue; int visited = 0; // 0번 vertex부터 출발 visit[visited] = true; queue.Push(visited); int connecctComponent = 1; // 연결요소 개수 IoHandler ioh; ioh.putString("인접행렬 + BFS"); ioh.putNewLine(); for (int i = 0; i < size; i++) { // 다음 vertex로 넘어왔는데 false면 연결요소가 끊어진 것 if (visit[i] == false) { ioh.putString("연결요소"); ioh.putInteger(connecctComponent++); ioh.putString(" - "); while (1) { // 출력 ioh.printConnectedComponent(queue.Front()); queue.Pop(); if (queue.isEmpty() == true) { break; } } ioh.putNewLine(); } if (visit[i] == false) { visit[i] = true; queue.Push(i); } for (int j = 0; j < size; j++) { if (adjMatrix[i][j] == true) { if (visit[j] == false) { visit[j] = true; queue.Push(j); } } } } // for end if (queue.isEmpty() == false) { ioh.putString("연결요소"); ioh.putInteger(connecctComponent++); ioh.putString(" - "); while (1) { // 출력 ioh.printConnectedComponent(queue.Front()); queue.Pop(); if (queue.isEmpty() == true) { break; } } ioh.putNewLine(); } return; }