각 노드와 그 무향 그래프에 정수 값을 갖는 n * m 행렬이 있습니다. 나는 그것에 대한 인접 목록을 만들고 싶다. 어떻게해야합니까? 어떤 도움이라도 대단히 감사합니다.인접 목록의 자바 구현
답변
첫 번째 설명은 사용자가 m
을 n
으로 말하면서는 제외하고 인접 매트릭스로 보입니다. 인접 행렬은 항상 정사각형이므로 m==n
으로 가정해야합니다. 행렬 요소는 모서리 가중치입니다.
그래프의 인접성 목록 표현은 (일반적으로) 쌍 집합의 배열 adj
입니다. 세트 adj[i]
은 표현 된 그래프에서 정사각형 i
에서 j
까지 w
의 정방향 에지 i--w-->j
이있는 경우 쌍 <j, w>
을 포함합니다.
이 정의를 사용하면 n
빈 인접성 집합을 adj[i]
으로 시작한 다음 행렬 요소 m[i][j] = w
을 반복해야합니다. 각각에 대해 <j, w>
~ adj[i]
을 추가하십시오.
이 자바 코드는 매우 사소한 것이므로 필자는 쓰지 않을 것이다. 인접 목록으로 표현 된 그래프의 유형은 ArrayList<HashMap<Integer, Integer>> adjacencies
과 같습니다. 쌍 <j,w> in adj[i]
은 해시 표 adjacencies.get(i)
에 저장된 j -> w
의 매핑입니다. 이러한 인접성을 생성하는 코드는 adjacencies.get(i).put(j, w)
입니다.
이 방법을 사용하면, 해시 테이블 adjacencies.get(i)
에 키를 통해 반복하여 i
에 인접한 정점을 반복 모든 일반적인 그래프 작업 등 w = adjacencies.get(i).get(j)
에 주어진 가장자리 i--w-->j
의 무게를보고, 할 수 있습니다.
N이 연결됩니다 목록 가변 크기의 각 :
안녕 유전자, 인접성 매트릭스를 구축하려는 데이터가있는 배열은 m * n입니다. 여기서 m! = n입니다. – Jw123
그래프에 몇 개의 꼭지점이 있습니까? 'n' 또는'm'? 인접 행렬은 정사각형 행렬입니다. 만약 여러분이'n x m' 행렬을 가지고 있다면, 분명히 몇몇 모서리가 빠져 있습니다. –
ShivaKumar가 정확합니다. @ Jw123이 직사각형 행렬을 사용한다면, 그것은 일종의 비표준 그래프 표현이며, 누군가가 당신을 도울 수 있기 전에 행렬의 각 요소가 나타내는 것을 설명해야합니다. 좋은 대답을 얻는 비결은 항상 좋은 질문입니다. – Gene
는 여기에 문제에 인접 list.According를 만들기위한 간단한 구현입니다.
먼저 초기화 정수의 연결리스트의 ArrayList를 :
ArrayList<LinkedList<Integer>> adj_list = new ArrayList<LinkedList<Integer>>();
그리고 간단하게 다음과 같은 코드를 반복하여 링크 된 목록을 추가 :의 당신이 그래프를 표현하기 위해 그것을 사용하는 경우,
adj_list.add(new LinkedList<Integer>());
을 더 linked lists = no vertices.So 위의 n (꼭지점 수) 번 반복해야합니다.
는adj_list.get(0).add(3);
adj_list.get(0).add(4);
adj_list.get(0).add(5);
그것은 단순히 3,4에 정점 0에서 그래프의 가장자리가 의미
말은 이제 다음 첫 번째 연결 lists.Do에 숫자 3,4,5를 추가 할 , 5.
가중 그래프가 필요한 경우 어떻게해야합니까? –
@MasterYushi 여기에 'javafx.util.Pair'를 사용하여 그래프의 가중치 가장자리에 대한 예제가 있습니다. http://theoryofprogramming.com/adjacency-list-in-java/ – RichArt
시도해 보셨습니까? 2 차원 배열? –
인접성 매트릭스를 의미합니까? – Jw123
각 위치가 좋아하는 목록의 배열을 원하십니까? – dreamcrash