📄 frame1.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class Frame1 extends JFrame {
JPanel contentPane;
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
JLabel jLabel4 = new JLabel();
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();
JTextField jTextField3 = new JTextField();
JTextField jTextField4 = new JTextField();
JLabel jLabel5 = new JLabel();
JLabel jLabel6 = new JLabel();
JLabel jLabel7 = new JLabel();
JLabel jLabel8 = new JLabel();
JLabel jLabel10 = new JLabel();
JLabel jLabel11 = new JLabel();
JLabel jLabel12 = new JLabel();
JTextArea jTextArea1 = new JTextArea();
JTextField jTextField5 = new JTextField();
JTextArea jTextArea2 = new JTextArea();
JTextField jTextField6 = new JTextField();
JScrollPane jScrollPane1 = new JScrollPane(jTextArea1);
JScrollPane jScrollPane2 = new JScrollPane();
JButton jButton3 = new JButton();
//Construct the frame
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
jButton1.setBounds(new Rectangle(25, 25, 125, 25));
jButton1.setFont(new java.awt.Font("Dialog", 0, 15));
jButton1.setText("设置交通图");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
contentPane.setFont(new java.awt.Font("Dialog", 0, 15));
contentPane.setMaximumSize(new Dimension(32767, 32767));
contentPane.setInputVerifier(null);
contentPane.setLayout(null);
this.setSize(new Dimension(700, 550));
this.setTitle("道路交通配流系统");
jButton2.setBounds(new Rectangle(320, 120, 95, 25));
jButton2.setFont(new java.awt.Font("Dialog", 0, 15));
jButton2.setText("开始执行");
jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this));
jLabel1.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel1.setText("交叉概率:");
jLabel1.setBounds(new Rectangle(320, 35, 75, 25));
jLabel2.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel2.setText("变异概率:");
jLabel2.setBounds(new Rectangle(320, 75, 75, 25));
jLabel3.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel3.setText("迭代次数:");
jLabel3.setBounds(new Rectangle(500, 35, 75, 25));
jLabel4.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel4.setText("样群数目:");
jLabel4.setBounds(new Rectangle(500, 75, 75, 25));
jTextField1.setFont(new java.awt.Font("Dialog", 0, 12));
jTextField1.setText("0.75");
jTextField1.setBounds(new Rectangle(395, 35, 55, 23));
jTextField2.setFont(new java.awt.Font("Dialog", 0, 12));
jTextField2.setText("0.01");
jTextField2.setBounds(new Rectangle(395, 75, 55, 23));
jTextField3.setFont(new java.awt.Font("Dialog", 0, 12));
jTextField3.setText("10");
jTextField3.setBounds(new Rectangle(575, 35, 55, 23));
jTextField4.setFont(new java.awt.Font("Dialog", 0, 12));
jTextField4.setText("20");
jTextField4.setBounds(new Rectangle(575, 75, 55, 23));
jLabel5.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel5.setText("求解出:");
jLabel5.setBounds(new Rectangle(455, 138, 76, 27));
jLabel6.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel6.setText("第");
jLabel6.setBounds(new Rectangle(455, 182, 20, 29));
jLabel7.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel7.setBounds(new Rectangle(477, 187, 18, 16));
jLabel8.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel8.setText("代流量最小,最小值为:");
jLabel8.setBounds(new Rectangle(493, 186, 167, 20));
jLabel10.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel10.setText("相应的路径为:");
jLabel10.setBounds(new Rectangle(455, 256, 112, 17));
jLabel11.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel11.setIconTextGap(4);
jLabel11.setText("实际最小流量为:");
jLabel11.setBounds(new Rectangle(455, 391, 128, 22));
jLabel12.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel12.setText("遗传算法执行过程:");
jLabel12.setBounds(new Rectangle(30, 124, 144, 27));
jTextArea1.setFont(new java.awt.Font("Dialog", 0, 13));
jTextArea1.setDebugGraphicsOptions(0);
jTextArea1.setEditable(false);
jTextField5.setFont(new java.awt.Font("Dialog", 0, 15));
jTextField5.setEditable(false);
jTextField5.setText(" ");
jTextField5.setBounds(new Rectangle(490, 221, 95, 25));
jTextArea2.setFont(new java.awt.Font("Dialog", 0, 15));
jTextArea2.setEditable(false);
jTextArea2.setText("");
jTextField6.setFont(new java.awt.Font("Dialog", 0, 15));
jTextField6.setEditable(false);
jTextField6.setText("");
jTextField6.setBounds(new Rectangle(490, 423, 95, 25));
jScrollPane1.setBounds(new Rectangle(31, 166, 385, 337));
jScrollPane2.setBounds(new Rectangle(486, 285, 183, 94));
jButton3.setBounds(new Rectangle(25, 70, 126, 25));
jButton3.setFont(new java.awt.Font("Dialog", 0, 15));
jButton3.setText("设置道路状况");
jButton3.addActionListener(new Frame1_jButton3_actionAdapter(this));
contentPane.add(jLabel12, null);
contentPane.add(jTextField3, null);
contentPane.add(jTextField4, null);
contentPane.add(jLabel3, null);
contentPane.add(jLabel4, null);
contentPane.add(jTextField2, null);
contentPane.add(jLabel1, null);
contentPane.add(jLabel2, null);
contentPane.add(jLabel5, null);
contentPane.add(jLabel10, null);
contentPane.add(jScrollPane1, null);
jScrollPane1.getViewport().add(jTextArea1, null);
contentPane.add(jScrollPane2, null);
contentPane.add(jLabel11, null);
contentPane.add(jLabel6, null);
contentPane.add(jLabel8, null);
contentPane.add(jLabel7, null);
contentPane.add(jButton2, null);
contentPane.add(jButton3, null);
contentPane.add(jButton1, null);
contentPane.add(jTextField1, null);
contentPane.add(jTextField6, null);
contentPane.add(jTextField5, null);
jScrollPane2.getViewport().add(jTextArea2, null);
}
//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
void jButton2_actionPerformed(ActionEvent e) {
try {
BufferedReader in1 = new BufferedReader(new
FileReader("traffic.dat"));
String st="";
st=in1.readLine();
int vertexNum=Integer.parseInt(st);
st=in1.readLine();
int lineNum=Integer.parseInt(st);
int[][] line=new int[lineNum][3];
int[][] lineCap=new int[lineNum][3];
for(int i=0;i<lineNum;i++){
st=in1.readLine();
StringTokenizer t = new StringTokenizer(st, "|");
String value=t.nextToken();
line[i][0]=Integer.parseInt(value);
lineCap[i][0]=Integer.parseInt(value);
value=t.nextToken();
line[i][1]=Integer.parseInt(value);
lineCap[i][1]=Integer.parseInt(value);
value=t.nextToken();
line[i][2]=Integer.parseInt(value);
value=t.nextToken();
lineCap[i][2]=Integer.parseInt(value);
}
in1.close();
BufferedReader in2 = new BufferedReader(new
FileReader("lines.dat"));
st=in2.readLine();
int alineNum=Integer.parseInt(st);
int[][] aline=new int[alineNum][3];
for(int i=0;i<alineNum;i++){
st=in2.readLine();
StringTokenizer f = new StringTokenizer(st, "|");
String value=f.nextToken();
aline[i][0]=Integer.parseInt(value);
value=f.nextToken();
aline[i][1]=Integer.parseInt(value);
value=f.nextToken();
aline[i][2]=Integer.parseInt(value);
}
in2.close();
int [] c=new int[lineNum*2];
int [] q=new int [lineNum*2];
TraffMap traffMap=new TraffMap(vertexNum,line,lineCap,lineNum);
Lines lines=new Lines(aline,alineNum);
Search.searchLines(traffMap, lines);
A a=new A(traffMap,lines);
int aa[][];
int verNum;//表示列数
int horNum;//表示行数
aa=a.getA();
verNum=a.getVerNum();
horNum=a.getHorNum();
/* for(int i=0;i<horNum;i++)
{
for(int j=0;j<verNum;j++)
System.out.print(aa[i][j]+" ");
System.out.println("") ;
}*/
//初始化c[]
int [][] graph=traffMap.getTraffMap() ;
int p=0;
int num=traffMap.getVertexNum();
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(graph[i][j]>0){c[p]=graph[i][j];p++;}
//初始化q[]
int cap[][]=traffMap.getLineCap();
p=0;
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(cap[i][j]>0){q[p]=cap[i][j];p++;}
double g1=Double.parseDouble(jTextField1.getText());
double g2=Double.parseDouble(jTextField2.getText());
int g3=Integer.parseInt(jTextField3.getText());
int g4=Integer.parseInt(jTextField4.getText());
Genetic.genAlgorith(a,c,q,g1,g2,g3,g4) ;
jLabel7.setText(""+Genetic.getK());
jTextField5.setText(""+Genetic.getMinflux());
String r="";
int[] xc=Genetic.getXCopy();
for(int i=0;i<verNum;i++)
r=r+xc[i];
String li=Genetic.getLines();
jTextArea2.setText(""+li);
jTextArea1.setText(""+Genetic.getProcess());
//求出最小值
long minfit=MinFit.GetMinFit(a,c);
//System.out.println("最小值为:"+minfit);
jTextField6.setText(""+minfit);
} catch (IOException exception){ }
}
void jButton1_actionPerformed(ActionEvent e) {
Frame2 frame2=new Frame2();
frame2.setTitle("设置交通图");
boolean packFrame = false;
if (packFrame) {
frame2.pack();
}
else {
frame2.validate();
}
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame2.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame2.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
frame2.setVisible(true);
}
void jButton3_actionPerformed(ActionEvent e) {
Frame3 frame3=new Frame3();
frame3.setTitle("设置道路车辆状况");
boolean packFrame = false;
if (packFrame) {
frame3.pack();
}
else {
frame3.validate();
}
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame3.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame3.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
frame3.setVisible(true);
}
}
class TraffMap {
private int vertexNum;//交通图的节点数
private int graph[][]=new int[1000][1000];//交通图
private int capacity[][]=new int[1000][1000];//线路容量
public TraffMap( int verNum,int line[][],int [][] lineCap,int lineNum){//verNum表示交通图节点数,line表示路线集合,lineNum表示线路数
vertexNum=verNum;
int i,j;
for( i=0;i<vertexNum;i++)
for( j=0;j<vertexNum;j++)
{graph[i][j]=0;capacity[i][j]=0;}
for(i=0;i<lineNum;i++)
{createMGraph(line[i][0],line[i][1],line[i][2],graph);
createMGraph(lineCap[i][0],lineCap[i][1],lineCap[i][2],capacity);
}
}
public void createMGraph( int vertice1,int vertice2,int value,int[][] gra){
gra[vertice1][vertice2]=value;
gra[vertice2][vertice1]=value;
}
public int[][] getTraffMap(){
return graph;
}
public int getVertexNum(){
return vertexNum;
}
public int[][] getLineCap(){
return capacity;
}
}
class Search {
private static int graph[][];
private static int vertexNum;
private static int aline[][];
private static int lineNum;
public static void searchLines(TraffMap traffMap,Lines lines){
graph=traffMap.getTraffMap();
vertexNum=traffMap.getVertexNum();
aline=lines.getLines();
lineNum=lines.getLineNum();
try
{
PrintWriter out = new PrintWriter(new FileWriter("a.dat"));
String line="";
for(int i=0;i<lineNum;i++){
out.println(aline[i][0]+"-"+aline[i][1]);
boolean m=dfs(aline[i][0],aline[i][1],graph,line, out);
if(m==false)
System.out.print("sorry");
out.println("");
}
out.println("over");
out.close();}
catch (IOException exception)
{ }
}
private static boolean dfs(int vertex1,int vertex2, int [][]grp,String lj,PrintWriter out){
int [][] grpCopy=new int [vertexNum][vertexNum];//用于减少图的节点
for(int i=0;i<vertexNum;i++)
for(int j=0;j<vertexNum;j++){
grpCopy[i][j]=grp[i][j];}
boolean p=false;//p表示是否可以搜索到该路径,初始为false,只要一次搜索成功即为true
int i,s=1;//i用于循环,s用于控制是否执行递归
//中止操作
boolean m=false;//表示是否该停止递归
for(int l=0;l<vertexNum;l++)
for(int k=0;k<vertexNum;k++){
if(grpCopy[l][k]>0)m=true;//如果图中没有路径了,则停止递归m=false否则m=true
}
if(m==false||vertex1==vertex2){//如果继续递归或者目的和起始节点相同则停止
p=false;s=0;
}
if(graph[vertex1][vertex2]>0){//如果可以直接到达则直接输出路径,但是还要继续搜索
out.println(lj+vertex1+"|"+vertex2+"|");
p= true;
}
//否则去掉点vertex1
lj=lj+vertex1+"|";
for(i=0;i<vertexNum;i++){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -