数据结构 并查集
2014-05-17 21:52
218 查看
package com.dadou.datastructure; import java.util.Scanner; public class UnionFind { /** * @param args */ static int f[]=new int[1003]; static int x[][]=new int [1003][2]; static boolean map[][]=new boolean[1003][1003]; static boolean flag[]=new boolean[1024]; public static void main(String[] args) { // TODO Auto-generated method stub int n,maxValue; Scanner scan=new Scanner(System.in); n=scan.nextInt(); maxValue=scan.nextInt(); for(int i=1;i<=n;i++) { x[i][0]=scan.nextInt(); x[i][1]=scan.nextInt(); f[i]=i; } for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { if((double)maxValue>=getValue(i,j)) { map[i][j]=true; map[j][i]=true; } } scan.nextLine(); while(true) { String str=scan.nextLine(); if(str.indexOf("o")>-1) { int k=Integer.parseInt(str.split(" ")[1]); flag[k]=true; for(int i=1;i<=n;i++) { if(flag[i]&&map[i][k]) { make(k,i); } } } else { int k=Integer.parseInt(str.split(" ")[1]); int kk=Integer.parseInt(str.split(" ")[2]); check(k, kk); } } } private static void make(int i, int k) { // TODO Auto-generated method stub int t=find(i); int j=find(k); if(t!=j) f[j]=t; } private static int find(int i) { // TODO Auto-generated method stub if(f[i]!=i) f[i]=find(f[i]); return f[i]; } private static void check(int i,int k) { int t=find(i); int j=find(k); if(t==j) System.out.println("success"); else System.out.println("failure"); } private static double getValue(int i, int j) { // TODO Auto-generated method stub return Math.sqrt((x[i][0]-x[j][0])*(x[i][0]-x[j][0])+(x[i][1]-x[j][1])*(x[i][1]-x[j][1])); } }
相关文章推荐
- 数据结构 || 并查集模版
- Vision_数据结构_并查集
- 笔记:数据结构-并查集
- 算法起步之并查集(不相交集合数据结构)
- HDU 1856 More is better (数据结构,并查集)
- 【数据结构】朋友圈问题的解决——并查集
- 数据结构之并查集
- 算法学习基础篇(四):数据结构(堆、二叉搜索树、并查集)
- [算法导论读书笔记]用于不相交集合的数据结构(并查集)
- 数据结构专题小结:并查集
- 数据结构 之 并查集
- ACM 数据结构-并查集 HDU 1710 Binary Tree Traversals .
- 数据结构 || 带权并查集(判断数列和)
- 用于不相交集合的数据结构(并查集)
- 数据结构--并查集
- 数据结构之并查集(Java版本)
- poj 1611 The Suspects 初级->数据结构->简单并查集的应用
- 不相交集合的数据结构-并查集
- 一种简单而有趣的数据结构——并查集
- c语言数据结构之并查集 总结