alsghdjrk   5년 전

알고리즘 우선 적어 보겠습니다.

vector<pair <int, int> > v와 vT 2개

vector<pair>v을 선언 처음에 0,0을 넣고 함수 dfs를 실행

#함수 dfs

i =1~n까지 돌며

조건인 v[i].second > 0 (0은 처음 v[0] = 0,0 이 들어있고 dfs1이라는 다음함수에서 방문 했던곳은 -1로 교체하기떄문에 재방문 하지않기 위해 썻습니다.)면 dfs1을 실행


#함수 dfs1(int x) 여기서x는 위 dfs함수의i 혹은 이번에 들어온 pair 인자의 두번째 값 입니다.

 1. 벡터v가 갖고있는 x번째  pair값이 들어오면 vT벡터에 넣는다

2-1들어온pair가 범위값 v.size()보다 크던지 0보다 작으면 <벡터의 크기는 인자의 갯수보다 작고 1보다 크거나 같다는게 조건에 있습니다.> 반복문을 돌며 들어왔던 v의 pair 두번째 인자를 모두 -1로(방문기록)바꿔주고 vT를 클리어후 0을 리턴한다

2-1 예시 1 2 3 4 5

               2 3 4 9 5  이렇게 배열이 있다면 위의 1 2 3 4 의 아래값인 2 3 4 9 값을 전부 -1로 바꿉니다

2-2 v[x].second 값과(새로들어온 pair의 두번째 값과) vT[0].first값이 같으면 사이즈 만큼 리턴해주고 vT를 클리어해         준다 또한 방문했던 것들은 전부 -1로 바꿔준다

2-2 예시 1 2 3 4 5 6 7

               3 1 1 5 5 4 6 이렇게 있다면 1방문후 3을 방문 후에 사이즈 2를 리턴 배열은

              1  2   3  4  5  6  7

             -1  1  -1  5  5  4  6 이렇게 바뀐다음 2에서 2-1의 조건에 걸려

              1   2  3   4  5  6  7

             -1  -1  -1  5  5  4  6 이렇게 바뀐다음 5에서 다시 2-2 의 조건에 걸려

              1   2  3   4  5  6  7

             -1  -1  -1  5  -1  4  6 이렇게 바뀝니다

  2-3 걸리는 것이 없으면 vT에 중첩

사용한 벡터는 2개이고요 방문이 끝나면 clear해주기 떄문에 어디서 메모리 초과가 이러나는지 모르겠습니다.

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