您的位置:首页 > 理论基础 > 数据结构算法

数据结构 并查集

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]));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: