import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;
import java.util.Random;
import javax.swing.*;
public class Hello {
static int table[][]
={{0,3,5,99,99,99,3},
{3,0,3,7,99,99,11},
{5,3,0,3,99,99,99},
{99,7,3,0,3,9,11},
{99,99,99,3,0,3,99},
{99,99,99,9,3,0,3},
{3,11,99,11,99,3,0}
};
static int path[][]=
{{2,4,5,7,3,6},
{2,7,6,3,5,4},
{6,5,3,2,4,7},
{5,3,2,6,4,7},
{2,4,7,5,6,3},
{2,4,3,5,6,7},
{3,5,7,6,4,2},
{4,2,5,6,3,7},
{5,4,2,7,6,3},
{7,6,4,5,3,2},
};
static int distance[]=new int[10];
public static void init()
{
for(int i=0;i<10;i++)
{
for(int j=0;j<5;j++)
{
distance[i]=distance[i]+table[path[i][j]-1][path[i][j+1]-1];
}
distance[i]=distance[i]+table[path[i][0]-1][0]+table[path[i][5]-1][0];
}
sort();
}
public static void sort()
{
for(int i=0;i<10;i++)
{
distance[i]=0;
for(int j=0;j<5;j++)
{
distance[i]=distance[i]+table[path[i][j]-1][path[i][j+1]-1];
}
distance[i]=distance[i]+table[path[i][0]-1][0]+table[path[i][5]-1][0];
}
for(int i=0;i<9;i++)
for(int j=0;j<10-i-1;j++)
if(distance[j]>distance[j+1])
{
int temp;
temp=distance[j];
distance[j]=distance[j+1];
distance[j+1]=temp;
for(int k=0;k<6;k++)
{
temp=path[j][k];
path[j][k]=path[j+1][k];
path[j+1][k]=temp;
}
}
/* System.out.println("_________________________");
for(int i=0;i<10;i++)
{
System.out.println(distance[i]);
for(int j=0;j<6;j++)
{
System.out.print(path[i][j]+" ");
}
System.out.println();
}
System.out.println("_________________________");*/
}
public static void recombination(int row)
{
Random rand = new Random();
int p,q; //int范围类的随机数
p = rand.nextInt(5);
q = rand.nextInt(5);
int i,j,k,n,m;
boolean accu[];
accu=new boolean[6];
for( n=2;n<=7;n++)
{
for( i=0;i<6;i++)
if(path[p][i]==n)
break;
for( j=0;j<6;j++)
if(path[q][j]==n)
break;
m=(i+j)/2;
while(accu[m]==true)
m=(m+1)%6;
path[row][m]=n;
accu[m]=true;
}
}
public static void motation()
{
Random rand = new Random();
int i,j,k,temp; //int范围类的随机数
i = rand.nextInt(5);
j = rand.nextInt(6);
k = rand.nextInt(6);
for(int p=0;p<6;p++)
{
path[5][p]=path[i][p];
}
temp=path[5][j];
path[5][j]=path[5][k];
path[5][k]=temp;
i = rand.nextInt(5);
j = rand.nextInt(6);
k = rand.nextInt(6);
for(int p=0;p<6;p++)
{
path[6][p]=path[i][p];
}
temp=path[6][j];
path[6][j]=path[6][k];
path[6][k]=temp;
/* i = rand.nextInt(5);
j = rand.nextInt(6);
k = rand.nextInt(6);
for(int p=0;p<6;p++)
{
path[7][p]=path[i][p];
}
temp=path[7][j];
path[7][j]=path[7][k];
path[7][k]=temp;
i = rand.nextInt(5);
j = rand.nextInt(6);
k = rand.nextInt(6);
for(int p=0;p<6;p++)
{
path[8][p]=path[i][p];
}
temp=path[8][j];
path[8][j]=path[8][k];
path[8][k]=temp;
i = rand.nextInt(5);
j = rand.nextInt(6);
k = rand.nextInt(6);
for(int p=0;p<6;p++)
{
path[9][p]=path[i][p];
}
temp=path[9][j];
path[9][j]=path[9][k];
path[9][k]=temp;
/*
System.out.println("______motation___________________");
System.out.println("i="+i+" j="+j+" k="+k);
for(i=0;i<10;i++)
{
for(j=0;j<6;j++)
{
System.out.print(path[i][j]+" ");
}
System.out.println();
}
System.out.println("______motation over___________________");*/
}
public static void main(String arg[])
{
sort();
while(true)
{ motation();
recombination(7);
recombination(8);
recombination(9);
sort();
if(distance[0]==distance[3]&&distance[0]<=100)
break;
}
sort();
for(int i=0;i<10;i++)
{
System.out.println(distance[i]);
for(int j=0;j<6;j++)
{
System.out.print(path[i][j]+" ");
}
System.out.println();
}
}
}
进化tsp
最新推荐文章于 2022-01-20 19:26:20 发布