해밀턴 경로
시간 제한1초메모리 제한512 MB
방향 간선을 따라 모든 정점을 한 번씩 방문하는 경로 중 사전 순으로 가장 빠른 경로를 출력하고, 없으면 -1을 출력합니다.
문제
정점이 개이고 간선이 개인 방향 그래프 가 있다. 정점 번호는 부터 까지이다. 서로 다른 두 정점 와 사이에는 에서 로 가는 간선과 에서 로 가는 간선 중 정확히 하나만 있다. 그래서 간선의 방향을 무시하면 는 완전 그래프이다.
는 의 인접 행렬이다. 가 +이면 에서 로 가는 간선이 있고, -이면 없다. 는 항상 .이다.
의 해밀턴 경로는 모든 정점을 정확히 한 번씩 지나는 길이 인 경로이다. 해밀턴 경로가 여러 개일 수 있으므로, 지나는 정점 번호를 차례대로 나열한 수열이 사전순으로 가장 앞서는 경로 하나를 찾아야 한다. 수열 가 수열 보다 사전순으로 앞선다는 것은 두 수열이 처음으로 달라지는 자리에서 의 값이 더 작다는 뜻이다.
입력
첫째 줄에 정점의 개수 이 주어진다. 둘째 줄부터 개의 줄에 인접 행렬 가 주어진다. 이 개의 줄 중 번째 줄의 번째 문자가 이며, 줄 번호와 문자 번호는 모두 부터 센다.
출력
에 해밀턴 경로가 있으면 사전순으로 가장 앞서는 해밀턴 경로의 정점을 순서대로 공백으로 구분해 한 줄에 출력한다. 없으면 을 출력한다.