아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

해밀턴 경로

시간 제한1초메모리 제한512 MB

요약
방향 간선을 따라 모든 정점을 한 번씩 방문하는 경로 중 사전 순으로 가장 빠른 경로를 출력하고, 없으면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
그래프, 그리디, 위상 정렬
정답자
아직 제출이 없습니다

문제

정점이 NN개이고 간선이 N(N−1)/2N(N-1)/2개인 방향 그래프 GG가 있다. 정점 번호는 00부터 N−1N-1까지이다. 서로 다른 두 정점 ii와 jj 사이에는 ii에서 jj로 가는 간선과 jj에서 ii로 가는 간선 중 정확히 하나만 있다. 그래서 간선의 방향을 무시하면 GG는 완전 그래프이다.

XX는 GG의 인접 행렬이다. Xi,jX_{i,j}가 +이면 ii에서 jj로 가는 간선이 있고, -이면 없다. Xi,iX_{i,i}는 항상 .이다.

GG의 해밀턴 경로는 모든 정점을 정확히 한 번씩 지나는 길이 NN인 경로이다. 해밀턴 경로가 여러 개일 수 있으므로, 지나는 정점 번호를 차례대로 나열한 수열이 사전순으로 가장 앞서는 경로 하나를 찾아야 한다. 수열 aa가 수열 bb보다 사전순으로 앞선다는 것은 두 수열이 처음으로 달라지는 자리에서 aa의 값이 더 작다는 뜻이다.

입력

첫째 줄에 정점의 개수 NN이 주어진다. 둘째 줄부터 NN개의 줄에 인접 행렬 XX가 주어진다. 이 NN개의 줄 중 ii번째 줄의 jj번째 문자가 Xi,jX_{i,j}이며, 줄 번호와 문자 번호는 모두 00부터 센다.

출력

GG에 해밀턴 경로가 있으면 사전순으로 가장 앞서는 해밀턴 경로의 정점을 순서대로 공백으로 구분해 한 줄에 출력한다. 없으면 −1-1을 출력한다.

제한

  • 2≤N≤1002 \le N \le 100

예제8

  1. 예제 1

    입력
    2
    .+
    -.
    
    예상 출력
    0 1
    
  2. 예제 2

    입력
    3
    .++
    -.+
    --.
    
    예상 출력
    0 1 2
    
  3. 예제 3

    입력
    4
    .--+
    +.+-
    +-.-
    -++.
    
    예상 출력
    0 3 1 2
    
  4. 예제 4

    입력
    4
    .+-+
    -.+-
    +-.-
    -++.
    
    예상 출력
    0 3 1 2
    
  5. 예제 5

    입력
    5
    .++--
    -.-++
    -+.+-
    +--.+
    +-+-.
    
    예상 출력
    0 1 3 4 2
    
  6. 예제 6

    입력
    2
    .-
    +.
    
    예상 출력
    1 0
    
  7. 예제 7

    입력
    3
    .+-
    -.+
    +-.
    
    예상 출력
    0 1 2
    
  8. 예제 8

    입력
    4
    .---
    +.+-
    +-.+
    ++-.
    
    예상 출력
    1 2 3 0