标签:添加 中序 链接 广度优先遍历 内容 new 考试 语句 结果
public void dFS_AM(int site) { //输入深度优先遍历的开始顶点
System.out.println(this.vexs[site]); //输出该顶点
this.visited[site] = true; //置访问标志为true
for(int i = 0; i < this.vexs.length; i++) { //依次查找未访问邻接点,并以该邻接点为始点调用深度优先遍历算法
if(this.arcs[site][i] != 0 && !this.visited[i]) {
this.dFS_AM(i);
}
}
}
public void bFSTraverse() {
this.visited = new boolean[this.vexs.length]; //初始化访问标志数组
for(int i = 0; i < this.visited.length; i++) {
this.visited[i] = false;
}
for(int i = 0; i < this.visited.length; i++) {
if(!this.visited[i]) { //对未访问的顶点调用广度优先遍历算法
bFS_AM(i);
}
}
}
问题2:在编写测试代码的时候我吧文件读入,然后按照字符输出发现只是输出了路径的地址。
点评认真(+1)
学习图的实现,我发现每一个具体的图,就是该类的一个实例化对象,因此我们可以在构造函数中实现图的创建。创建好图后,我们还要实现图的遍历。由于图已经被我们抽象成一个类,因此我们可以将图的遍历定义成类的方法。对于连通图,调用遍历算法后即可访问所有结点,但对于非连通图,调用遍历算法后仍有一些结点没有被访问,需要从图中另选一个未被访问的顶点再次调用遍历算法。因此需要附设一个访问标志数组visited[n],来记录被访问的结点。
图的实现代码如下:
public AMGraph(int vexNum,int arcNum) { //输入点的个数和边的个数
this.vexs = new String[vexNum];
this.arcs = new int[vexNum][vexNum];
System.out.print("请依次输入顶点值,以空格隔开:");
Scanner sc = new Scanner(System.in);
for(int i = 0; i < vexNum; i++) { //根据输入建立点集
this.vexs[i] = sc.next();
}
for(int i = 0; i < vexNum; i++) { //初始化边集
for(int j = 0; j < vexNum; j++) {
this.arcs[i][j] = 0; //0表示该位置所对应的两顶点之间没有边
}
}
start:for(int i = 0; i < arcNum; i++) { //开始建立边集
sc = new Scanner(System.in);
int vex1Site = 0;
int vex2Site = 0;
String vex1 = null;
String vex2 = null;
System.out.print("请输入第" + (i+1) + "条边所依附的两个顶点,以空格隔开:");
vex1 = sc.next();
vex2 = sc.next();
for(int j = 0; j < this.vexs.length; j++) { //查找输入的第一个顶点的位置
if (this.vexs[j].equals(vex1)) {
vex1Site = j;
break;
}
if (j == this.vexs.length - 1) {
System.out.println("未找到第一个顶点,请重新输入!");
i--;
continue start;
}
}
for (int j = 0; j < this.vexs.length; j++) { //查找输入的第二个顶点的位置
if(this.vexs[j].equals(vex2)) {
vex2Site = j;
break;
}
if (j == this.vexs.length - 1) {
System.out.println("未找到第二个顶点,请重新输入!");
i--;
continue start;
}
}
if(this.arcs[vex1Site][vex2Site] != 0) { //检测该边是否已经输入
System.out.println("该边已存在!");
i--;
continue start;
}else {
this.arcs[vex1Site][vex2Site] = 1; //1表示该位置所对应的两顶点之间有边
this.arcs[vex2Site][vex1Site] = 1; //对称边也置1
}
}
System.out.println("基于邻接矩阵的无向图创建成功!");
sc.close();
}
参考资料
Java程序设计
Android程序设计
----------
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 6000行 | 30篇 | 400小时 | |
第一周 | 107/107 | 2/2 | 15/15 | |
第二周 | 454/526 | 2/4 | 32/47 | |
第三周 | 988/1514 | 2/6 | 31/78 | |
第五周 | 757/2271 | 2/8 | 31/109 | |
第六周 | 875/3146 | 1/9 | 31/140 | |
第七周 | 1282/4428 | 2/11 | 58/198 | |
第八周 | 1972/6400 | 2/13 | 36/234 | |
第九周 | 3799/10199 | 3/13 | 55/289 | |
第十周 | 1397/11596 | 2/13 | 28/317 | |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:60小时
实际学习时间:58小时
改进情况:树好难啊。
标签:添加 中序 链接 广度优先遍历 内容 new 考试 语句 结果
原文地址:https://www.cnblogs.com/lyz182329/p/11922407.html