方法是在dfs的过程中维护dfs的路径,到达叶子结点时将路径加入到答案中,具体见代码的注释。
在高青等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、成都网站建设 网站设计制作按需制作网站,公司网站建设,企业网站建设,品牌网站制作,成都全网营销,外贸营销网站建设,高青网站建设费用合理。
输入格式为:
7 A
A B
C A
D B
E B
C F
C G
其中,第一行表示结点数量n和根结点编号,第[2..n + 1]行每行两个字符u和v,表示树边。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static final int maxn = 1000;
int n; // 树的结点个数
char root; // 树的根
ListListCharacter ans = new ArrayListListCharacter(); // 结果,存放所有路径
boolean[][] G = new boolean[maxn][maxn]; // 邻接矩阵
/**
* dfs
* @param u 当前到达的结点
* @param fa 当前结点的父节点
* @param path 根到fa的路径
*/
void dfs(char u, char fa, ListCharacter path) {
path.add(u);
boolean leaf = true; // u为叶子结点
for(char v = 'A'; v = 'Z'; ++v) {
if(G[u][v] v != fa) { // 邻接矩阵中有别的边
leaf = false; // u不是叶子结点
dfs(v, u, path);
}
}
if(leaf) { // u为叶子结点,将路径加入到答案
ListCharacter pt = new ArrayListCharacter();
for(Character c : path) pt.add(c);
ans.add(pt);
}
path.remove(path.size() - 1);
}
public void go() throws FileNotFoundException
{
Scanner in = new Scanner(new File("data.in"));
String s; // 进行输入的处理时的临时变量
n = in.nextInt(); // 获取结点个数
s = in.next(); root = s.charAt(0); // 获取根
for(int i = 0; i n - 1; ++i) {
char u, v;
s = in.next(); u = s.charAt(0); // 获取边,并在邻接矩阵中做标记
s = in.next(); v = s.charAt(0);
G[u][v] = G[v][u] = true;
}
ListCharacter path = new ArrayListCharacter();
dfs(root, '0', path);
for(int i = 0; i ans.size(); ++i) { // 输出答案
for(Character c: ans.get(i))
System.out.print(c);
System.out.println();
}
in.close();
}
public static void main(String[] args) throws FileNotFoundException{
new Main().go();
}
}
快速生成树协议(RSTP)STP并不是已经淘汰不用,实际上不少厂家目前还仅支持STP。STP的最大缺点就是他的收敛时间太长,对于现在网络要求靠可靠性来说,这是不允许的,快速生成树的目的就是加快以太网环路故障收敛的速度。1.RSTP 5种端口类型STP定义了4种不同的端口状态,监听(Listening),学习(Learning),阻断(Blocking)和转发(Forwarding),其端口状态表现为在网络拓扑中端口状态混合(阻断或转发),在拓扑中的角色(根端口、指定端口等等)。在操作上看,阻断状态和监听状态没有区别,都是丢弃数据帧而且不学习MAC地址,在转发状态下,无法知道该端口是根端口还是指定端口。表8-20中看RSTP的端口状态只有三种状态,Discarding、Leaning和Forwarding。表8-20 STP和RSTP端口状态比较RSTP有五种端口类型。根端口和指定端口这两个角色在RSTP中被保留,阻断端口分成备份和替换端口角色。生成树算法(STA)使用BPDU来决定端口的角色,端口类型也是通过比较端口中保存的BPDUB来确定哪个比其他的更优先。1)根端口非根桥收到最优的BPDU配置信息的端口为根端口,即到根桥开销最小的端口,这点和STP一样。请注意图8-16上方的交换机,根桥没有根端口。按照STP的选择根端口的原则,SW-1和SW-2和根连接的端口为根端口。2)指定端口与STP一样,每个以太网网段段内必须有一个指定端口。假设SW-1的BID比SW-2 优先,而且SW-1的P1口端口ID比P2优先级高,那么P1为指定端口,如图8-17所示。 图8-16 RSTP根端口 图8-17 指定端口的选择3)替换端口如果一个端口收到另外一个网桥的更好的 BPDU,但不是最好的,那么这个端口成为替换端口,如图8-18所示。对于SW-2来说,端口P3收到的BPDU比自己优先,自己为次优先,P3为替换端口。4)备份端口如果一个端口收到同一个网桥的更好 BPDU,那么这个端口成为备份端。当两个端口被一个点到点链路的一个环路连在一起时,或者当一个交换机有两个或多个到共享局域网段的连接时,一个备份端口才能存在。如图8-19所示,SW-1的P1和P2口同时接入到以太网的同一网段,P1为指定端口,P2 优先级低,则P2端口为备份端口。 图8-18 替换端口的选择 图8-19 备份端口的选择5)禁用端口在快速生成树协议应用的网络运行中不担当任何角色。2.BPDU更新与变化RSTP添加标志位,如图8-20所示。在STP中,标志位只有0为TC和7为TCA使用,RSTP使用其中保留的6位。另外,RSTP在BPDU指定了端口的角色和端口状态,并且采用提议/同意的控制机制。 具体 参考 下
说明 edges[] edgelist1= g.listedges(graph1); 中的 listedges 方法有问题
class graph {
public double[][] generate(int n) {
return null;
}
public double[] listlength(double[][] d) {
return null;
}
public edges[] listedges(double [][] d) {
return null;
}
}
全返回null的,,,,,,,,,都还没做
首先在页面上有ul/标签
ulid="tree"class="ztree"/ul
2、定义ztree的配置参数
varsetting={
//check属性放在data属性之后,复选框不起作用
check:{
enable:true
},
data:{
simpleData:{
enable:true
},
}
};
核心参数:zTreeNodes
zTree
的全部节点数据集合,采用由JSON对象组成的数据结构,简单的说:这里使用Json格式保存了树的所有信息
zTreeNodes的格式分为两种:利用Json格式嵌套体现父子关系和Array简单格式
①带有父子关系的标准
zTreeNodes举例:
Js代码
varzTreeNodes=[
{"id":1,"name":"test1",
"nodes":[
{"id":11,"name":"test11","nodes":[
{"id":111,
"name":"test111"}
]},
{"id":12,"name":"test12"}
]},
......
];
②带有父子关系的简单Array格式(isSimpleData)的zTreeNodes举例:
Js代码
var
treeNodes=[
{"id":1,"pId":0,"name":"test1"},
{"id":11,"pId":1,
"name":"test11"},
{"id":12,"pId":1,"name":"test12"},
{"id":111,
"pId":11,"name":"test111"},
......
];
【实例一】(Java代码)
①在页面引用zTree的js和css:
Html代码
!--ZTree树形插件
--
linkrel="stylesheet"
href="%=root%/Web/common/css/zTreeStyle/zTreeStyle.css"
type="text/css"
!--linkrel="stylesheet"
href="%=root%/Web/common/css/zTreeStyle/zTreeIcons.css"
type="text/css"--
scripttype="text/javascript"
src="%=root%/Web/common/js/jquery-ztree-2.5.min.js"/script
②在script脚本中定义setting和zTreeNodes
Java代码
varsetting={
isSimpleData:true,//数据是否采用简单Array格式,默认false
treeNodeKey:"id",
//在isSimpleData格式下,当前节点id属性
treeNodeParentKey:"pId",
//在isSimpleData格式下,当前节点的父节点id属性
showLine:true,//是否显示节点间的连线
checkable
:true//每个节点上是否显示CheckBox
};
vartreeNodes=[
{"id":1,
"pId":0,"name":"test1"},
{"id":11,"pId":1,"name":"test11"},
{"id":12,
"pId":1,"name":"test12"},
{"id":111,"pId":11,"name":"test111"},
];
③在进入页面时生成树结构:
Js代码
varzTree;
Js代码
$(function(){
zTree=
$("#tree").zTree(setting,treeNodes);
});