⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame1.java

📁 运用遗传算法对交通流进行分配
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
   grpCopy[vertex1][i]=0;
   grpCopy[i][vertex1]=0;
   }
//去掉vertex1后,继续递归

   if(s==1){
   for(i=0;i<vertexNum;i++){

   if(grp[vertex1][i]==0)
    { }
   else if(dfs(i,vertex2,grpCopy,lj,out)==false)
            { }
      else {
       p=true;
       }//else
   }//for
   }//if
   return p;
   }
 }


  class  Lines  {

 private int lineNum;
 private int line[][]=new int[1000][3];

   public  Lines(int aline[][],int alineNum){
     lineNum=alineNum;
     for(int i=0;i<lineNum;i++){
       line[i][0]=aline[i][0];
       line[i][1]=aline[i][1];
       line[i][2]=aline[i][2];
     }

   }

   public int[][] getLines(){
     return line;
   }

   public int getLineNum(){
     return lineNum;
   }

 }

 class A {
   private int a[][]=new int[1000][1000];
   private int verNum;//表示列数
   private int horNum;//表示行数
   private int xynum;
   private int[] xy=new int[1000];


   public  A(TraffMap traffMap,Lines lines){

     //将文件中的路径写入节点
    Node1 list1=new Node1();
    Node2 list2=new Node2();
    Node3 list3=new Node3();

    int graph[][];
    int vertexNum;
    int aline[][];
    int lineNum;



    //int freeNode1;
    int header1=0,header2=0;//指向list1,list2,list3的头指针
    int  header3=0;
    int pointer1=0,pointer2=0,pointer3=0;//用于指向list1,list2,list3的指针
    int verNumCopy=-1;//用于控制给a[][]赋值
    int horNumCopy=-1;
    int [][] graphCopy=new int[1000][1000];//用于给a的每列赋值
    int flux=-1;

     graph=traffMap.getTraffMap();
     vertexNum=traffMap.getVertexNum();
     aline=lines.getLines();
     lineNum=lines.getLineNum();



    for(int i=0;i<vertexNum;i++)
      for(int j=0;j<vertexNum;j++)
        graphCopy[i][j]=0;//如果graphCopy[i][j]为1表示经过graphCopy[i][j]

    verNum=0;//给类属性初始化
    horNum=0;

    try {
    BufferedReader in = new BufferedReader(new
             FileReader("a.dat"));
    readData1(in,list1,list2,list3);
    in.close();




    } catch (IOException exception){   }

    //初始化xy[];


       int xyhor=0;
       int xyver=0;
        pointer1=header1;
        while( pointer1!=-1){
          pointer2=list1.hornext[pointer1];
           while(pointer2!=-1){
             xyver++;//列数
             pointer2=list2.hornext[pointer2];
           }//list2
           xy[xyhor]=xyver;
           xyver=0;
           xyhor++;
          pointer1=list1.vernext[pointer1];
        }//list1
         xynum=xyhor;


    //给horNum赋值

    for(int i=0;i<vertexNum;i++)
      for(int j=0;j<vertexNum;j++)
        if(graph[i][j]>0)horNum++;//行数

     //给verNum赋值

     pointer1=header1;
     while( pointer1!=-1){
       pointer2=list1.hornext[pointer1];
        while(pointer2!=-1){
          verNum++;//列数
          pointer2=list2.hornext[pointer2];
        }//list2
       pointer1=list1.vernext[pointer1];
     }//list1

     //给a[][]赋值
     for (int i=0;i<horNum;i++)
       for(int j=0;j<verNum;j++)
       a[i][j]=0;

     pointer1=header1;

     while( pointer1!=-1){
       flux++;
       pointer2=list1.hornext[pointer1];
       while(pointer2!=-1){
        pointer3=list2.vernext[pointer2];
        int s,d;
        verNumCopy++;
        s=list2.point[pointer2];
        d=list3.point[pointer3];
          graphCopy[s][d]=graph[s][d];
          int f=graph[s][d];
          pointer3=list3.vernext[pointer3];
          while(pointer3!=-1){
           s=d;
           d=list3.point[pointer3];
           graphCopy[s][d]=graph[s][d];

           pointer3=list3.vernext[pointer3];
          }
          for(int i=0;i<vertexNum;i++)
            for(int j=0;j<vertexNum;j++)
            {
              if(graph[i][j]>0)
                {
                  horNumCopy++;
                  if(graphCopy[i][j]>0){a[horNumCopy][verNumCopy]=aline[flux][2];

                  }

                 }

            }

          for(int i=0;i<vertexNum;i++)
        for(int j=0;j<vertexNum;j++)
          graphCopy[i][j]=0;
         horNumCopy=-1;
        pointer2=list2.hornext[pointer2];
       }//list2
       pointer1=list1.vernext[pointer1];
     }//list1
   }

   public int [][] getA(){
     return a;
   }
   public int getVerNum(){
     return verNum;
   }

   public int getHorNum(){
    return horNum;
   }

   public int[] getXy(){
     return xy;
   }

    public int getXynum(){
      return xynum;
    }

   private  void readData1(BufferedReader in,Node1 list1,Node2 list2,Node3 list3) throws IOException
    {
       int freeNode;
       String name,st;
       int s,d;
       while(true){
       st = in.readLine();
       if(st.equals("over")) return;
       StringTokenizer t = new StringTokenizer(st, "-");
       name=t.nextToken();
       s=Integer.parseInt(name);
       name=t.nextToken();
       d=Integer.parseInt(name);

       freeNode=list1.FindFree();
       list1.Create(0,freeNode,s,d);
       readData2(in,freeNode,list1,list2,list3,0);
      }//while
    }


   private void readData2(BufferedReader in,int freeNode,Node1 list1,Node2 list2,Node3 list3,int w) throws IOException
    {
      //w用于控制第一次操作
     int header2=0;
     int header3=0;
     int freeNode1;
     String name,st;
     int s;
     int v=0;
     int pointer2;


  while(true){
   if(w==0){
     st=in.readLine();
     if(st.equals(""))return;
     freeNode1=list2.FindFree();
     list1.hornext[freeNode]=freeNode1;
     header2=freeNode1;
     StringTokenizer t = new StringTokenizer(st, "|");
     name = t.nextToken();
     s=Integer.parseInt(name);
     list2.Create(freeNode1,freeNode1,s);
     w=1;
     v=0;
     while(t.hasMoreTokens()){
       if(v==0){
         name = t.nextToken();
         s=Integer.parseInt(name);
         freeNode1=list3.FindFree();
         list2.vernext[header2]=freeNode1;
         header3=freeNode1;
         list3.Create(header3,freeNode1,s);
         v=1;
       }
       else {
         name = t.nextToken();
         s=Integer.parseInt(name);
         freeNode1=list3.FindFree();
         list3.Create(header3,freeNode1,s);
       }

     }//while(t.hasMoreTokens())

    }//if(w==0)
    else{

   st = in.readLine();
   if(st.equals(""))return;
   StringTokenizer t = new StringTokenizer(st, "|");
   name = t.nextToken();
   s=Integer.parseInt(name);
   freeNode1=list2.FindFree();
   pointer2=freeNode1;
   list2.Create(header2,freeNode1,s);
   v=0;
    while(t.hasMoreTokens()){
      if(v==0){
         name = t.nextToken();
         s=Integer.parseInt(name);
         freeNode1=list3.FindFree();
         list2.vernext[pointer2]=freeNode1;
         header3=freeNode1;
         list3.Create(header3,freeNode1,s);
         v=1;
      }
      else {
         name = t.nextToken();
         s=Integer.parseInt(name);
         freeNode1=list3.FindFree();

         list3.Create(header3,freeNode1,s);

      }
    }//while(t.hasMoreTokens())
  }//else
 }//while(true)




    }



 }


 class Node1{
   int maxLength=100;
   int start[]=new int[maxLength];
   int destination[]=new int [maxLength];
   int vernext[]=new int [maxLength];
   int hornext[]=new int[maxLength];
   public Node1(){
     for(int i=0;i<maxLength;i++){
       vernext[i]=-2;hornext[i]=-1;
     }
   }

   public int FindFree(){
     int i;
     for(i=0;i<maxLength;i++)
       if(vernext[i]==-2)break;
     return i;
   }

   public void Create(int header,int freeNode,int sou,int des){
     int pointer;
     if(header==freeNode){
       start[header]=sou;
       destination[header]=des;
       vernext[header]=-1;}
     else{
       pointer=header;
       start[freeNode]=sou;
       destination[freeNode]=des;
       vernext[freeNode]=-1;
       while(vernext[pointer]!=-1)pointer=vernext[pointer];
         vernext[pointer]=freeNode;
     }
   }


 }

 class Node2{
   int maxLength=200;

   int point[]=new int [maxLength];
   int hornext[]=new int [maxLength];
   int vernext[]=new int[maxLength];

   public Node2(){
     for(int i=0;i<maxLength;i++){
       hornext[i]=-2;vernext[i]=-1;
     }
   }

   public int FindFree(){
     int i;
     for(i=0;i<maxLength;i++)
       if(hornext[i]==-2)break;
     return i;
   }

   public void Create(int header,int freeNode,int poi){
     int pointer;
     if(header==freeNode){
       point[header]=poi;
       hornext[header]=-1;}
     else{
       pointer=header;
       point[freeNode]=poi;
       hornext[freeNode]=-1;
       while(hornext[pointer]!=-1)pointer=hornext[pointer];
         hornext[pointer]=freeNode;
     }
   }




 }

 class Node3{
   int maxLength=400;

   int point[]=new int [maxLength];
   int vernext[]=new int[maxLength];
   public Node3(){

     for(int i=0;i<maxLength;i++){
       vernext[i]=-2;
     }
   }

   public int FindFree(){
     int i;
     for(i=0;i<maxLength;i++)
       if(vernext[i]==-2)break;
     return i;
   }

   public void Create(int header,int freeNode,int poi){//追加节点
     int pointer;
     if(header==freeNode){
       point[header]=poi;
       vernext[header]=-1;}
     else{
       pointer=header;
       point[freeNode]=poi;
       vernext[freeNode]=-1;
       while(vernext[pointer]!=-1)pointer=vernext[pointer];
        vernext[pointer]=freeNode;
     }
   }

   public void PrintList(int header){
     int pointer;
     pointer=header;
     while(pointer!=-1){
       System.out.print("["+point[pointer]);
       pointer=vernext[pointer];
     }
     System.out.println("");
   }

 }
 class Matrix {

  public static int[] convert(int[] xx,int[] xy,int length){
  int i=0,j=0;
  int n=0;
  int m=0;
  for(i=0;i<length;i++)
  m=m+xy[i];

  int [] z=new int[m];

    for(i=0;i<length;i++){
    j=n+xx[i];
    n=n+xy[i];
    z[j]=1;
    }
    return z;
  }
  public static int[] contraConvert(int[] x,int[] xy,int length){
  int i=0,j=0;
  int n=0,ncopy=0;
  int m=0;
  for(i=0;i<length;i++)
  m=m+xy[i];

  int [] z=new int[length];
  for(i=0;i<length;i++)
    z[i]=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -