https://www.acmicpc.net/problem/14926
그래프 문제
오일러의 경로
히어홀저 알고리즘
완전 그래프(Complete Graph) 에서 최대 간선 수 int len = (N * (N - 1)) / 2;
isVisited[N][1] = isVisited[1][N] = true;
를 통해서 순서대로 모두 방문할 수 있도록 한다.
해당 코드가 없으면 1 N
에서 중단되고 더 이상 모든 간선을 탐색할 수 없습니다.
int len = (N * (N - 1)) / 2;
for (int i = 0; i < len; i++) {
for (int j = 1; j <= N; j++) {
if (cur == j || isVisited[cur][j]) continue;
isVisited[cur][j] = isVisited[j][cur] = true;
cur = j;
break;
}
sb.append('a').append(cur).append(' ');
}
import java.io.*;
public class Main {
// input
private static BufferedReader br;
// variables
private static int N;
private static boolean[][] isVisited;
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
input();
bw.write(solve());
bw.close();
} // End of main()
private static String solve() {
StringBuilder sb = new StringBuilder();
isVisited[N][1] = isVisited[1][N] = true;
int cur = 0;
int len = (N * (N - 1)) / 2;
for (int i = 0; i < len; i++) {
for (int j = 1; j <= N; j++) {
if (cur == j || isVisited[cur][j]) continue;
isVisited[cur][j] = isVisited[j][cur] = true;
cur = j;
break;
}
sb.append('a').append(cur).append(' ');
}
sb.append("a1");
return sb.toString();
} // End of solve()
private static void input() throws IOException {
N = Integer.parseInt(br.readLine());
isVisited = new boolean[N + 1][N + 1];
} // End of input()
} // End of Main class