무방향 그래프에 사이클이 존재하는지의 여부를 확인하는 java 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Stack; import java.util.StringTokenizer; // http://clearpal7.blogspot.kr/2016/10/cycle.html // 무방향 그래프 -> cycle찾기 public class isCycle { static int N, M, T, cnt, flag; static ArrayList<Integer> adj[]; static boolean visited[]; public static void main(String[] args) throws Exception { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; T = Integer.parseInt(br.readLine()); for(int test_case = 1; test_case <=T; test_case++){ st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); adj = new ArrayList[N+1]; for(int i=1; i<=N; i++){ adj[i] = new ArrayList<>(); } for(int i=1; i<=M; i++){ st = new StringTokenizer(br.readLine()); int u = Integer.parseInt(st.nextToken()); int v = Integer.parseInt(st.nextToken()); adj[u].add(v); adj[v].add(u); } visited = new boolean[N+1]; if(isDfsCycle(1, -1)){ System.out.println("사이클이다"); }else{ System.out.println("사이클 아니다"); } } } private static boolean isDfsCycle(int curr, int parent) { visited[curr] = true; for(int next : adj[curr]){ if(!visited[next]){ if(isDfsCycle(next, curr)){ return true; } }else if(next != parent){ return true; } } return false; } } | cs |
'개발레시피 > └ Algorithm' 카테고리의 다른 글
CCW 판별법 (Java) (0) | 2018.03.04 |
---|---|
[기하/개념] 볼록 껍질 (Convex Hull) (0) | 2017.12.01 |
[그래프/개념] 최소 스패닝 트리(Minimum Spanning Tree), 크루스칼 알고리즘 (0) | 2017.11.16 |
[그래프/개념] 다익스트라 알고리즘(Dijkstra's Algorithm) , 최단경로구하기 (0) | 2017.11.13 |
[그래프/문제] BOJ9466, 텀프로젝트 알고리즘, DFS Cycle (0) | 2017.05.28 |
Comments