반응형
import java.util.*;
public class Main {
public static boolean visited [];
public static int map[][];
public static int n;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt(); //정점의 갯수
int m=sc.nextInt(); //간선의 갯수
int v=sc.nextInt(); //시작하는 정점
map=new int[n+1][n+1];
visited=new boolean[n+1];
Arrays.fill(visited, false); //visited 배열을 모두 false로 초기화
for(int i=0; i<n+1;i++){
Arrays.fill(map[i], 0);
}
for(int i=0;i<m;i++) {
int a=sc.nextInt();
int b=sc.nextInt();
map[a][b]=1;
map[b][a]=1;
}
dfs(v);
System.out.println();
Arrays.fill(visited, false);//visited 배열 재활용을 위해..
bfs(v);
}
public static void dfs(int k) {
System.out.print(k+" ");
visited[k]=true;
for(int i=0;i<n+1;i++) {
if(visited[i]==false&&map[k][i]==1) {
dfs(i);
}
}
}
//bfs는 재귀말고 반복으로
public static void bfs(int k) {
Queue<Integer> q = new LinkedList<Integer>();
visited[k]=true;
q.offer(k); //집어넣고
while(!q.isEmpty()){
int temp=q.poll();//꺼내서
System.out.print(temp+" ");
for(int i=0;i<n+1;i++) {
if(visited[i]==false&&map[temp][i]==1) {
q.offer(i);
visited[i] = true;
}
}
}
}
}
첫 그래프 문제
반응형
댓글