poj4639   5년 전

2차원 int 배열로 풀어봤는데 틀렸습니다가 나오네요.

 5,4,3,2,1이 순위일때 5는 (5->4) ,( 5->3 ),( 5->2 ), (5->1) 연결을 가지고, 4는 (4->3),(4->2),(4->1)이런 방식으로 각각 연결을 가지게했습니다

연결을 보내는 쪽은 1로 받는쪽은 -1로 표현했습니다.

5,4,3,2,1인 처음 경우에는 기본적으로 아래 행렬을 가지고

0 -1 -1 -1 -1

1  0 -1 -1 -1

1  1  0 -1 -1

1  1  1  0 -1

1  1  1  1  0

이때 입력받는 순서가 바뀐 쌍들은 예를 들어 (3,4)일 경우에는 4->3이 3->4로 바뀌므로 행렬 (3,4) (4,3)에 각각 -1을 곱해 방향을 바꿔주는 방식으로 표현했습니다. 이때 위상정렬을 이용하여, -1이 없는 행을 탐색하고 만약 -1이 없는 행이 없을경우는 순환이 생긴 경우이므로 impossible을 출력하고 메소드를 return했고, -1이 2개이상인 경우는 순서를 알수  없는 경우이므로 ?를 출력하고 return 시켰습니다. 그리고 하나만 있는경우는 하나를 linkedlist 에 넣고 -1이 없던 행을 전부 -1로 바꿔 다시 탐색되지 않게하고, 그 행에 해당하는 번호의 열을 0으로 바꿔 연결을 제거시킨후, 행의 수만큼 다시 돌아가게 했습니다.  

일단 테스트 케이스는 다 맞게 나오는데, 혹시 반례 좀 알려주실수 있으실까요?, 틀렸습니다가 나오네요.

댓글을 작성하려면 로그인해야 합니다.