유향 그래프의 제곱 G = (V, E)는 u ≠ w 인 경우에만 u → w가 E2에있는 그래프 G2 = (V, E2) u → v와 v → w가 둘 다 E2에있는 버텍스 v가 있습니다. 입력 파일은 정점의 순서쌍으로 임의의 순서로 가장자리를 나열하며 각 가장자리는 별도의 선에 있습니다. 정점은 1에서부터 정점의 총수까지 순서대로 번호가 매겨집니다.정점 연결에 대한 알고리즘
1 6
1 4
1 3
2 4
2 8
2 6
2 5
3 5
3 2
3 6
4 7
4 5
4 6
4 8
5 1
5 8
5 7
6 3
6 4
7 5
7 4
7 6
8 1
그렇다면 출력이 될 것이다 :
1: 3 4 7 8 5 2 6
2: 5 6 3 4 1 8 7
3: 1 7 8 6 5 4
4: 5 6 8 7 3 1
5: 3 1 4 6
6: 2 7 5 8
7: 1 5 6 8 3 4
8: 6 4 3
우리는 입력 데이터의 예를 보면
* 자기 루프 중복은/병렬 에지
허용되지
나는이 코드를 C로 작성하고있다.
내 생각은 파일을 통해 실행하는 것이다. 포인터가 얼마나 많은지를 결정한 다음 포인터의 배열을 할당합니다. 목록에 1이 들어있는 곳을 다시 검색 한 다음 해당 숫자가 어디에 있는지 찾아 봅니다. 그것의 중복 또는 동일한 번호 (1) 다음 포인터의 배열에서 연결된 목록에 추가합니다. 파일의 모든 정점 번호에 대해이 작업을 수행합니다.
그러나 나는 이것이 매우 비효율적이라고 생각하며이를 수행하는 최선의 방법이 아닙니다. 누구든지 다른 제안이 있다면 나는 매우 감사 할 것입니다.
도움
희망을, 당신은 수동 비트 벡터를 사용하여 (1)의 존재를 조회하는 O를 얻을 수 있습니다. – oldrinb
G2의 인접성 행렬은 G1의 인접 행렬의 제곱으로부터 쉽게 얻을 수 있습니다. –
@KerrekSB 의견을 남겨주셔서 감사합니다!나는 그것이 전에 나를 때리지 않았다라고 생각할 수 없다. 이렇게하면 문제가 너무 단순 해집니다! – ZAX