1. 程式人生 > >BFS/DFS 判斷是否是二分圖

BFS/DFS 判斷是否是二分圖

package Graph;
import java.util.ArrayDeque;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class IsToColor {
 
 boolean isTwoColor = true;
 LinkedList<Integer> []map;
 boolean []visit;
 boolean[]color;
 int v, e;
 public static void main(String[] args) {
  IsToColor dfs = new IsToColor();
   dfs.run();
  for(int i = 0; i < dfs.v; i++ ) {
   dfs.dfs(i);
  }
  System.out.println(dfs.isTwoColor);
  IsToColor bfs = new IsToColor();
  bfs.run();
  for(int i = 0; i < bfs.v; i++ ) {
   bfs.bfs(i);
  }
  System.out.println(bfs.isTwoColor);
 }
 public  void run() {
  Scanner in = new Scanner(System.in);
  v = in.nextInt();
  e = in.nextInt();
  map = new LinkedList[v];
  visit = new boolean[v];
  color = new boolean[v];
  for(int i = 0; i < map.length; i++ ) {
   map[i] = new LinkedList<>();
  }
  for(int i = 0; i < e; i++ ) {
   int a = in.nextInt();
   int b = in.nextInt();
   map[a].offer(b);
   map[b].offer(a);
  }
 }
 public void dfs(int cur) {
  visit[cur] = true;
  for(int i = 0; i < map[cur].size(); i++ ) {
   int w = map[cur].get(i);
   if(!visit[w]) {
    color[w] = !color[cur];
    dfs(w);
   }
   else if(color[w] == color[cur]) {
    isTwoColor = false;
    return;
   }
  }
  
 }
 
 
 
 public void bfs(int start) {
  Queue<Integer> que = new LinkedList<>();
  que.offer(start);
  visit[start] = true;
  while(!que.isEmpty()) {
   int cur = que.poll();
   
   for(int i = 0; i < map[cur].size(); i++ ) {
    int w = map[cur].get(i);
    if(!visit[w]) {
     visit[w] = true;
     color[w] = !color[cur];
     que.offer(w);
    }
    else if(color[w] == color[cur]){
     isTwoColor = false;
     return;
    }
   }
   
  }
 }
}