在做优化路径时,由于找出期望结点到核心结点的全部路径,会有一些冗余的路径出现导致资源浪费,所以无需将所有路径都进行添边操作,而是通过优化算法删除掉一些冗余路径。
例如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++;
// }
}
}
如图所示,运行后留下的路径为7-9-12和7-8-12,成功。