bfs 문제이고, stack으로 풀 수 있다. bfs와 dfs 문제는 코드 자체의 큰 틀은 잘 만들지만, 세부적인 조건을 주는 것을 잘 못하는 것 같다. if-else문을 적절하게 사용하여 조건 주는 연습이 많이 필요 할 것 같다.
// 문제 review
public class P2606_r {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
boolean path[][] = new boolean[n+1][n+1];
boolean visited[] = new boolean[n+1];
for(int i=0; i<m; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int com1 = Integer.parseInt(st.nextToken());
int com2 = Integer.parseInt(st.nextToken());
path[com1][com2] = path[com2][com1] = true;
}
Stack <Integer> stack = new Stack<>();
stack.add(1);
int cnt = 0;
while(!stack.isEmpty()) {
int curr = stack.pop();
for(int i=2; i<=n; i++) {
if(path[curr][i] && !visited[i]) {
stack.push(i);
visited[i] = true;
cnt++;
}
}
}
System.out.println(cnt);
}
}