在做优化路径时,由于找出期望结点到核心结点的全部路径,会有一些冗余的路径出现导致资源浪费,所以无需将所有路径都进行添边操作,而是通过优化算法删除掉一些冗余路径。

  例如7-9-12和7-9-15-12,这两条路径如果想要变成结构可达路径,按顺序,我们首先都需要将9变为核心结点,那么可以说第一条路径是包含于第二条路径中的,第一条路径只需要将9变为核心,而第二条需要先将9,再将15变为核心,添边条数是大于第一条路经的,这种情况我们就认为第二条路径是冗余路径,而7-9-15-12和7-9-14-13-12这两条路径来说,就不存在一条路径包含另一条路径的情况,无需删除,我们使用二维数组来保存路径,方法是将一条路径除最后的核心结点以外的结点取出,例如7-9-12就将7,9取出,并记下个数n,之后在二维数组遍历,一行代表一条路径,如果有哪一行前n个数与刚才取出的完全一致,那么就将行数较长的那一行判定为冗余路径,将路径上所有结点置为-1,程序清单如下:

package lujing;

/**
 *
 * @author Administrator
 */
public class Lujing {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int ww=0;
        int uu = 0;
        int kk=0;
        int lujing[][]=
        {
            {7,9,12,15,17,6,13},
            {7,9,15,13,12},
            {7,9,12},
            {7,9,12,13},
            {7,8,12,13},
            {7,8,14,13},
            {7,8,12}
        };
        for(int i=0;i<lujing.length;i++)
        {    
            if(lujing[i][0]!=-1)
        {
            int[] d=new int[lujing[i].length-1];
            for(int j=0;j<lujing[i].length-1;j++)
            {
                d[j]=lujing[i][j];
            }
            for(int f=0;f<lujing[i].length-1;f++)
            {
              System.out.print(d[f]+"\t");
            }
            System.out.print("\n");
           
            for(int J=0;J<lujing.length;J++)
            {
               if(lujing[J].length>lujing[i].length)
               {
                for(int JJ=0;JJ<lujing[i].length-1;JJ++)
                { 
                    System.out.print(lujing[J][JJ]+"**");

                    if(d[JJ]==lujing[J][JJ])
                    {
                        kk++;
                    }                    
                }
                System.out.print(kk+"!");
                System.out.print("\n");
                System.out.println(lujing[J].length);
                System.out.println(lujing[i].length);
                if(kk==lujing[i].length-1&&lujing[J].length>lujing[i].length)
                {
                    for(int rr=0;rr<lujing[J].length;rr++)
                    {
                        lujing[J][rr]=-1;
                    }
                    System.out.println(J+"######");
                }
                
                kk=0;
               }
            }
        }
        }
  //      System.out.println(ww);
        for(int s=0;s<lujing.length;s++)
        {
            for(int a=0;a<lujing[s].length;a++)
            {
                System.out.print(lujing[s][a]+"\t");
            }
            System.out.println("\n");
        }
   //    int [][]Lujing = new int[lujing.length-ww][];
 //      System.out.println(Lujing.length);
// Lujing[0][0]=1;
// System.out.println(Lujing);
  //      for(int s=0;s<lujing.length;s++)
 //       {
 //           for(int a=0;a<lujing[s].length;a++)
 //           {
  ///              System.out.println(lujing[s][a]);
   //             if(lujing[s][a]!=-1)
   //             {  
  //                   Lujing[s][a]=lujing[s][a]; 
   //               System.out.println(Lujing[s][a]+"__");
   //             }
  //                 uu=uu-1;
   //                 break;
             

  //          }
 //          uu++;
//       }
        
    }
    
}

Java 二维数组存储路径,并删除路径中冗余的部分路径,留下精炼路径_java

如图所示,运行后留下的路径为7-9-12和7-8-12,成功。