토너먼트 그래프에서 주어진 두 규칙으로 정점을 사이클에 하나씩 끼워 넣고 규칙이 막히면 -1을 출력합니다.
보통7그래프시뮬레이션아직 제출이 없습니다시간 제한1.5초메모리 제한512 MB정점이 N개, 간선이 N(N−1)/2개인 방향 그래프 G가 있다. 정점 번호는 0부터 N−1까지다. 서로 다른 두 정점 i와 j 사이에는 i에서 j로 가는 간선과 j에서 i로 가는 간선 중 정확히 하나만 있다. 따라서 간선의 방향을 무시하면 G는 완전 그래프다.
X는 G의 인접 행렬이다. Xi,j가 +이면 i에서 j로 가는 간선이 있고, -이면 없다. Xi,i는 항상 .이다.
G의 해밀턴 회로는 G의 모든 정점을 한 번씩 지나는 길이 N짜리 사이클이다. G가 주어지면 해밀턴 회로가 있는지 판정하고, 있으면 하나를 출력한다.
첫째 줄에 정점의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 인접 행렬 X가 주어진다. 이 중 i번째 줄의 j번째 문자가 Xi,j이다.
G에 해밀턴 회로가 없으면 -1을 출력한다.
있으면 해밀턴 회로가 지나는 정점 N개를 지나는 순서대로 공백 하나로 구분해 출력한다. 해밀턴 회로가 여러 개일 수 있으므로, 아래 절차가 만드는 회로를 그대로 출력한다.
서로 다른 정점을 담은 수열 c0,c1,…,ck−1을 유지한다. 이 수열은 사이클 c0→c1→⋯→ck−1→c0을 뜻하고, (ck−1,c0)을 포함해 이웃한 모든 쌍은 G의 간선이다. 정점 0 하나만 담은 수열에서 시작해, 수열이 정점 N개를 모두 담을 때까지 다음을 반복한다. 수열에 없는 정점을 자유 정점이라고 부른다.
+이고 Xv,c(i+1)modk가 +인 가장 작은 첨자 i를 찾아 v를 ci 바로 뒤에 넣는다. 그런 i는 항상 있다.G에 해밀턴 회로가 있으면 매 단계에서 두 규칙 중 하나가 반드시 적용되고, 수열의 맨 앞은 계속 정점 0이므로 출력하는 회로는 정점 0에서 시작한다.