杭电 2063 java 二分图
来源:互联网 发布:大数据魔方 编辑:程序博客网 时间:2024/05/22 12:08
import java.util.Arrays;import java.util.Scanner; import java.math.*;public class Main { public int map[][] = new int[1010][1010];public int match[] = new int[1010]; public int used[] = new int[1010]; public boolean find(int x,int n){ for(int i = 1;i <=n;i++) { if((used[i]==0) &&map[x][i]==1) { used[i] =1; if(match[i]==-1||find(match[i],n))//如果i点没有匹配或i点可以匹配 { match[i]= x; return true; } } }return false;} public static void main(String[] args){ Scanner cin=new Scanner(System.in); int k,m,n; while(cin.hasNext()) { k = cin.nextInt(); if(k == 0) System.exit(0); m = cin.nextInt(); n = cin.nextInt(); int cnt = 0; Main lei =new Main(); Arrays.fill(lei.match, -1); for(int i = 0;i<lei.map.length;i++) { for(int j = 0;j<lei.map.length;j++) lei.map[i][j] =0; } for(int i = 1; i<= k;i++) { int a,b ; a =cin.nextInt(); b = cin.nextInt(); lei.map[a][b] = 1; } for(int i = 1;i<=m;i++) { Arrays.fill(lei.used, 0); if(lei.find(i,n)) cnt++; } System.out.println(cnt); } }}
public int map[][] = new int[1010][1010]; //map[][]邻接矩阵,match[x1]=y1表示x1的部分图的匹配点是y1.used[i]表示是否被遍历
//如果i点没有被遍历过,且i与x是不同的部分图
if(match[i]==-1||find(match[i],n))//如果i点没有匹配或i点可以匹配
阅读全文