2012-07-18 4 views
0

원본 (정점), 대상 (정점) 및 무게를 저장하는 Edge 클래스가 있습니다.그래프가 플롯 된 후 인접 목록을 만드는 방법은 무엇입니까?

이름, x 좌표, y 좌표 및 Edge [] adjacentList를 저장하는 Vertex 클래스가 있습니다.

또한 두 개의 ArrayLists : 에지와 정점을 저장하는 Graph 클래스가 있습니다.

현재 정점/노드와 가장자리를 플롯하면 정점과 가장자리 목록에 각각 자동으로 추가됩니다.

이제이 두 배열 목록을 사용하여 Edge [] adjacentList를 채우고 싶습니다. 그러나 어떻게해야할지 모르겠습니다. 만약 누군가가 저에게 포인터를 줄 수 있거나 코드가 어떻게 생겼는지에 대한 개요를 알려 주시면 감사하겠습니다.

감사합니다.

답변

1

우선, 코드에 중복성이 있습니다. Edge 클래스는 소스 정점을 포함 할 필요가 없습니다. 왜냐하면 그 정점을 Vertex 클래스에 저장하고 있기 때문에 정점이 소스가 될 것입니다.

지금 어떤 정점의 인접 목록에 테두리를 추가합니다 : A와 A는 소스 B.와 B가 대상 정점입니다 :

는 두 개의 정점을 가정 해 봅시다. 단지 가장자리 클래스의 인스턴스를 생성 가장자리를 만들려면 (분명히 거기에 정의 된 생성자)와 정점 A의 인접 목록에 추가

Edge e1= new Edge('B' , weightofedge); 
정점의

한다고 가정 예는 V1, 즉 정점 A는 v1.adjacentList[index]=e1;

또는 한 줄로도 지정할 수 있습니다. V | | X | V |

당신은 정점 클래스를 가질 수있는 이웃을 포함하는 모든 인스턴스 홀드 ArrayList를 아니면 부울이있을 수 있습니다

+0

답변 해 주셔서 감사합니다. 알고리즘을 실행하기 전에 에지를 플로팅 할 때 각 꼭지점에 대한 인접성 목록을 계산하는 것이 더 효율적입니까? – RikudouSennin

+0

@RikudouSennin 귀하의 질문에 답변하지 못했습니다. 제발 좀 더 자세히 설명해 주실 수 있습니까? – dejavu

+0

@ Android 디코딩, 내가 정점과 가장자리를 플로팅 할 때 인접 목록을 채우는 것이 더 효율적인지 궁금합니다. 즉, Vertex 및 Edge의 새 인스턴스가 만들어 질 때입니다. 또는 알고리즘이 실행되기 전에 그래프가 완전히 그려지면 최후에 인접 목록을 계산하는 것이 더 나은가? – RikudouSennin

1

저는 Edge를 param으로 가져오고 Vertex를 반환하는 .either 메서드와 .other 메서드 (Vertex를 사용하고 Edge의 다른 Vertex를 반환 함)를 만듭니다. Graph 클래스의 가장자리 목록을 반복합니다. 각 모서리에 대해 하나의 Vertex를 가져 와서 변수에 저장하고 v1이라고 부릅니다. 이제 다른 Vertex를 호출하여 v2라고 부릅니다.

v1, v2 조합을 v1의 Edge [] 및 v2의 Edge [] 모두에 추가하십시오.

1

는 그래프를 구현하는 몇 가지 방법이 있습니다 Matrix [i] [j]가 true이면 꼭지점 i에서 꼭지점 j로 가장자리를 향하게한다는 것을 의미합니다.