인접(Adjacency)
같은 정점을 거치지 않은 간선들의 sequence
어떤 정점에서 다른 정점으로 가는 경로는 여러가지일 수 있다.
0 - 6의 경로 예시
싸이클(Cycle)
두 정점을 연결하는 간선의 유무를 행렬로 표현
무방향 그래프
방향 그래프
import java.util.Arrays;
import java.util.Scanner;
public class AdjMatrixTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int V = sc.nextInt(); // 정점 개수
int E = sc.nextInt(); // 간선 개수
// 무방향 그래프
int[][] adjMatrix = new int[V][V]; // 기본 초기화값 0 : 인접하지 않은 상태
for (int i = 0; i < E; i++) {
int from = sc.nextInt();
int to = sc.nextInt();
adjMatrix[to][from] = adjMatrix[from][to] = 1;
}
for (int[] adj : adjMatrix) {
System.out.println(Arrays.toString(adj));
}
}
}
/*
입력
7
8
0 1
0 2
0 5
0 6
4 3
5 3
5 4
6 4
*/
/*
출력
[0, 1, 1, 0, 0, 1, 1]
[1, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 1, 0]
[0, 0, 0, 1, 0, 1, 1]
[1, 0, 0, 1, 1, 0, 0]
[1, 0, 0, 0, 1, 0, 0]
*/
import java.util.ArrayList;
import java.util.Scanner;
public class AdjListTest2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int V = sc.nextInt(); // 정점 개수
int E = sc.nextInt(); // 간선 개수
ArrayList<Integer>[] adjList = new ArrayList[V]; // 각 노드의 리스트
for (int i = 0; i < V; i++) {
adjList[i] = new ArrayList<>();
}
for (int i = 0; i < E; i++) {
int from = sc.nextInt();
int to = sc.nextInt();
adjList[from].add(to);
adjList[to].add(from);
}
for (int i = 0; i < V; i++) {
System.out.println(adjList[i]);
}
}
}
/*
입력
7
8
0 1
0 2
0 5
0 6
4 3
5 3
5 4
6 4
*/
/*
출력
[1, 2, 5, 6]
[0]
[0]
[4, 5]
[3, 5, 6]
[0, 3, 4]
[0, 4]
*/