Algorithm/그래프 탐색

BOJ#4191 Dominos 2

밤이2209 2017. 9. 10. 00:44

BOJ#4191 Dominos 2


* 문제



* 풀이

어렵지 않은 문제였습니다.
풀이는 아래 코드로 대체합니다.



* 나의 코드


https://github.com/stack07142/BOJ/blob/master/BOJ%234191/src/Main.java



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

static ArrayList<ArrayList<Integer>> edge;
static boolean[] visited;
static int ans = 0;

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int T = Integer.parseInt(br.readLine());

// Test Case Loop
while (T-- > 0) {

// Input
edge = new ArrayList<>();

StringTokenizer st = new StringTokenizer(br.readLine());

int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int l = Integer.parseInt(st.nextToken());

visited = new boolean[n + 1];

for (int i = 0; i < n + 1; i++) {

edge.add(new ArrayList<>());
}

for (int i = 0; i < m; i++) {

st = new StringTokenizer(br.readLine());

edge.get(Integer.parseInt(st.nextToken())).add(Integer.parseInt(st.nextToken()));
}

ans = 0;

for (int i = 0; i < l; i++) {

knockDominos(Integer.parseInt(br.readLine()));
}

System.out.println(ans);
}
}

static void knockDominos(int domino) {

if (visited[domino]) return;

ans++;
visited[domino] = true;

for (int i = 0; i < edge.get(domino).size(); i++) {

knockDominos(edge.get(domino).get(i));
}

}
}


'Algorithm > 그래프 탐색' 카테고리의 다른 글

BOJ#1613 역사  (0) 2017.10.06
BOJ#2593 엘리베이터  (0) 2017.10.02
BOJ#2412 암벽 등반  (0) 2017.09.10
BOJ#1963 소수 경로  (0) 2017.09.05
BOJ#1890 점프  (0) 2017.07.24