2

그래서 C++에서 지시 식 비순환 그래프를 만들었습니다. 텍스트 파일이나 파일에 저장하려고합니다. 어떻게해야합니까?지향 비순환 그래프를 디스크에 저장하는 방법은 무엇입니까?

피씨 : 혼란 스럽다 ... 파일 포맷 방법을 묻는다.

미리 감사드립니다.

+2

당신은 그것을 직렬화하는 코드를 작성합니다. – sbi

+0

* 지시 된 비순환 그래프 *는 * n-ary tree *와 동일하며 정확하게 동일한 방법으로 저장할 수 있습니다. – Seth

+1

@Seth : DAG를 트리로 변환하면 트리가 기하 급수적으로 커질 수 있습니다. – Potatoswatter

답변

6

간단한 방법은 모든 노드에 노드 ID를 각각 할당 한 다음 시작 및 끝 노드의 노드 ID를 사용하여 모든 호를 저장하는 것입니다. 그래프의 각 정점은 당신이 당신의 파일에 대해 다음과 같은 구조를 사용할 수있는 ID의 어떤 종류가있는 경우

이 (등 ... 루프, 연결 그래프를 곱하면, 비 연결 그래프 포함)

1

을 모든 경우를 처리합니다 :

<num vertexes> 
1 <num neighbors> <neighbor ID> ... <neighbor ID> 
... 
N <num neighbors> <neighbor ID> ... <neighbor ID> 

또는 사각형 그래프를 사용하여 그래프를 저장할 수 있습니다.

3

누군가 다른 사람이 그것을 한 방법에 대한 예를 보려면 graphviz과 '도트'언어를 살펴보십시오.

기존 파일 형식을 기반으로 파일 형식을 지정하는 것은 항상 자신의 고유 한 형식을 고안하는 것보다 낫습니다. 종종 사용자가 소유하지 않은 내용을 생각할 수도 있습니다. 그리고 stabdard laguage를 고수한다면 graphviz 웹 사이트의 형식과 도구에 대한 링크가 많이 있습니다.

0

매트릭스의 (i, j) 항목은 노드 i와 노드 j가 연결된 것을 나타냅니다.

디스크에 쓰려면 노드 수를 적어 놓은 다음 행별로 행렬을 작성하십시오. 이 방법으로 n^2 + 1 숫자를 디스크에 쓸 것입니다.

그러나이 방법은 그래프가 희박한 경우에 비효율적입니다 (즉, 노드 수가 노드 수인 < <). 하지만 간단한 직렬화 구조를 가지고 있습니다.

관련 문제