import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.Graphics;
import javax.swing.table.*;
import java.awt.geom.*;
import java.lang.Math;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import java.io.OutputStream;
public class md1208
{
public static void main(String[] args)
{
Centerf frame=new Centerf();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
//~~~~~~主界面设计
class Centerf extends JFrame implements ActionListener
{
private JMenu[] menus;
private JMenuItem[] items;
private int i=0;
private JButton quit;
private JPanel panel;
public Centerf()
{
setSize(400,500);
setTitle("最接近点对问题");
//~~~~~主菜单设计
menus=new JMenu[1];
menus[0] = new JMenu("选择");
items=new JMenuItem[1];
items[0]=new JMenuItem("一维");
//items[1]=new JMenuItem("二维");
quit=new JButton("退出");
panel=new JPanel();
for(int i=0;i<items.length;i++)
{
menus[0].add(items[i]);
}
panel.add(quit);
//~~~~添加到界面上
JMenuBar mb=new JMenuBar();
for(int i=0;i<menus.length;i++)
mb.add(menus[i]);
setJMenuBar(mb);
Container cpanel=getContentPane();
cpanel.setLayout(new FlowLayout());
cpanel.add(panel,BorderLayout.SOUTH);
quit.addActionListener(this);
items[0].addActionListener(this);
//items[1].addActionListener(this);
}
public void actionPerformed(ActionEvent event)//frame 监听事件
{
if(event.getSource()==quit)
{
System.exit(0);
}
if(event.getSource()==items[0])
{
yiwei yi=new yiwei();
yi.show();
}
/*if(event.getSource()==items[1])
{
}*/
}
}
//一维界面设置
class yiwei extends JFrame implements ActionListener
{
private JPanel zpanel,zcpanel;
private zDrawpanel zpanel2;
private JButton goback;
Random ran=new Random();
private BorderLayout borderLayout1=new BorderLayout();
private GridLayout gridLayout1=new GridLayout();
private int[] rand;
private int[] le;
private int min_dist;
private int minfirst,minlast;
Graphics2D g1,g2;
public yiwei()
{
setSize(600,600);
setTitle("一维演示");
goback=new JButton("返回");
zpanel=new JPanel();
zpanel2=new zDrawpanel();
zpanel.setLayout(gridLayout1);
zpanel.add(goback);
goback.addActionListener(this);
zcpanel=(JPanel)this.getContentPane();
zcpanel.setLayout(borderLayout1);
zcpanel.add(zpanel,BorderLayout.NORTH);
zcpanel.add(zpanel2,BorderLayout.CENTER);
rand=new int[10];
for(int i=0;i<10;i++)
{
rand[i]=ran.nextInt(340);
}
}
public void actionPerformed(ActionEvent event)
{
if(event.getSource()==goback) //~~~监听返回事件
{
hide();
}
}
class zDrawpanel extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g1=(Graphics2D)g;
g1.setColor (Color.blue);
g1.draw(new Line2D.Double(60,200,600,200));
for(int i=0;i<10;i++)
g1.fillOval(rand[i]+60,199,2,2);
for(int i=1;i<=10;i++)
{
for(int j=0;j<10-i;j++)
{
if(rand[j]>rand[j+1])
{
int temp;
temp=rand[j];
rand[j]=rand[j+1];
rand[j+1]=temp;
}
}
}
int len=Cpair1(0,9);
int k=select(len);
g2=(Graphics2D)g;
g2.setColor (Color.yellow);
g2.draw(new Line2D.Double(60+rand[k],200,60+rand[k+1],200));
}
int Min_Of_Three(int a,int b,int c)
{
int min=a;
if(a>=b)
min=b;
if(min>=c)
min=c;
return min;
}
int select(int Len)
{
le=new int[9];
for(int i=0;i<9;i++)
{
le[i]=rand[i+1]-rand[i];
}
int q=0;
for(int k=0;k<9;k++)
if(Len==le[k])
q=k;
return q;
}
int Cpair1(int ifst,int ilst)
{
int nCp=ilst-ifst+1;
int d;
if(nCp==2)
{
min_dist=rand[ilst]-rand[ifst];
d=min_dist;
return d;
}
else if (nCp<2)
{
min_dist=min_dist;
d=min_dist;
return d;
}
else
{
int ifst1=ifst; //分治后前部分的第一个下标
int ilst1=(int)((ifst+ilst)/2);//前部分的最后一个下标
int ifst2=ilst1+1;
int ilst2=ilst;
int d1=Cpair1(ifst1,ilst1);
int d2=Cpair1(ifst2,ilst2);
int p=rand[ilst1];
int q=rand[ifst2];
min_dist=Min_Of_Three(d1,d2,q-p);
d=min_dist;
return d;
}
}
}
}
/*//二维界面设置
class erwei extends JFrame //implements ActionListener
{
}
*/