QingYi. 发表于 2021-1-8 22:03

二分图(染色法)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    static int n , m ,idx;
    static int N = 2000010;
    static int [] e = new int;
    static int [] ne = new int;
    static int [] h = new int;
    //当前的颜色 0 1 2
    static int [] color = new int;

    public static void main(String[] args) throws IOException {
      BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
      String[] s = bf.readLine().split(" ");
      n = Integer.parseInt(s);
      m = Integer.parseInt(s);
      Arrays.fill(h,-1);
      while (m-- > 0){
            String[] res = bf.readLine().split(" ");
            int a = Integer.parseInt(res);
            int b = Integer.parseInt(res);
            //无向图,两条边
            add(a,b);
            add(b,a);
      }
      boolean flag = true;
      for(int i = 1;i<=n;i++){
            //如果当前的color没被用过,进入dfs
            if (color==0){
                //从当前的点去染1
                boolean rs = dfs(i,1);
                //如果返回的是false 直接输出false了
                if (!rs){
                  flag = false;
                  break;
                }
            }
      }
       if (flag){
         System.out.println("Yes");
       }else {
         System.out.println("No");
      }
    }

    private static boolean dfs(int curNode, int c) {
      //首先设置好当前的颜色
      color = c;
      //开始循环遍历
      for(int i = h;i!=-1;i = ne){
            int next = e;
            //如果当前的color是0 表示没有访问过
            if (color==0){
                //如果是1 下次进入dfs的是2; 反之亦然,确实很巧妙
                if (!dfs(next,3-c)){
                  return false;
                }
                //如果当前颜色和传进来的颜色相同的话,也是false
            }elseif (color==c){
                return false;
            }
      }
      return true;
    }

    private static void add(int a, int b) {
      e= b;
      ne = h;
      h = idx++;
    }
}

列明 发表于 2021-1-8 22:27

這java看起來就好像是加了花括號的python。
我有一個想法:
以後是不是可以一鍵將Java轉成python,
或者是一鍵將python轉成Java。

马云爱逛京东 发表于 2021-1-8 22:41

列明 发表于 2021-1-8 22:27
這java看起來就好像是加了花括號的python。
我有一個想法:
以後是不是可以一鍵將Java轉成python,


我记得有一个python的库,可以直接在Python里面使用Java代码

huamu 发表于 2021-1-9 00:32

mark,研究研究

QingYi. 发表于 2021-1-9 08:28

列明 发表于 2021-1-8 22:27
這java看起來就好像是加了花括號的python。
我有一個想法:
以後是不是可以一鍵將Java轉成python,


哈哈,我还没有看见有这种软件
页: [1]
查看完整版本: 二分图(染色法)