3, 4가 맞지 않나요?
1420번 - 학교 가지마!
그리고 주석 처리된 부분을 풀어야 할 듯 싶습니다. 4방향으로 모두 간선을 다셔야 할 거에요.
또 결정적인 것이 57~62번 줄에서 분명 정점을 2개로 쪼개놓고 있고, 입력을 받을 때도 그걸 처리하고 있는데
정작 인접한 칸끼리 간선을 연결할 때는 쪼갠 정점의 구분이 없네요.
정점 v를 들어오는 정점 v1과 나가는 정점 v2로 쪼갰을 때, u에서 v로 갈 수 있다면 u2 -> v1로 간선을 연결해야 할 텐데
코드상의 +2라던가 +2*m 등은 저 번호와 아무 상관이 없고, 결과적으로 from과 to 모두 들어오는 정점의 번호가 되겠군요. 이 부분을 고치셔야 할 듯 합니다. 나가는 정점 -> 들어오는 정점으로...
그리고 플로우에서는 역방향간선도 인접 리스트에 넣어줘야 합니다. 예를 들면 60~61번 줄의 경우 이뿐 아니라
cMap[{2 * i + 1, 2 * i}] = 0;
adj[2 * i + 1].push_back(2 * i);
이렇게 플로우 그래프상에서 반대방향 간선도 추가로 필요합니다. 처음엔 capacity가 0이지만, 순방향으로 흐를 때 유량을 상쇄시키면서 역방향으로 이동하는 경로를 찾으려면 저 역방향 간선이 필요하죠.
지금 제가 생각하는 방식은, char형 그림 따로(# , k, h , .으로 이루어 진 배열), 그리고 쪼개어진 정점 넘버링을 map STL로 관리중이고 간선을 adj로 관리중이구여
아래 코드 부분이
from이 0부터 시작하며 쪼개어진 정점의 왼쪽것을 계속 가리키고 있도록 했습니다. 0, 2, 4 , 6, ...
저는 맞다고 생각하고 그래프를 생성하였는데 정확히 어떻게 틀렸다는건가요..? ㅠㅠ
이게 사람이 맞다고 생각하고있으니 잘안보이네요 ㅠㅠ
그리고 제가 그 주석처리 한부분은
어짜피 왼쪽위에서 오른쪽아래로가며 서로 반대편것도 계속 추가해주고있기때문에 오른쪽아래에서 왼쪽위 부분은 필요없지않나요..??
라이님 너무 오래 물어서 죄송해여ㅠㅠ
https://www.acmicpc.net/board/... 이 링크에 대해 답변좀 해주실 수 있나요..?
댓글을 작성하려면 로그인해야 합니다.
kkw564 6년 전
민컷 개념, 정점을 2개로 쪼개는 개념을 처음 접해봐서 네트워크 플로우 단원이 조금 어렵네요
현재 정점을 두개로 쪼개서 정점 내부는 단방향 그래프로 만들었고 정점 내부의 용량은 1로 뒀습니다.
그 외에는 INF로 용량을 줘서 벽이 아닌이상 어디든지 갈 수 있도록 했는데요
4 5
.....
.K#..
...H.
.....
에는 3이 나오고
4 5
.....
.K...
...H.
.....
에는 4가 나오고
에는 1이 잘 나옵니다.
어느 부분을 더 고쳐야 할까요?