标签:思路 间接 代码 根据 length 深度优先遍历 最短路径 问题 入栈
课程:《程序设计与数据结构》
班级: 1823
姓名:张端云
学号:20182303
实验教师:王志强
实验日期:2019年12月2日
必修/选修: 必修
图的综合实践
(1) 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分)
(2) 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分)
(3) 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分)
(4) 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分)
(5) 完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分)
初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义。
输入1为无向图,输入2为有向图
if(Direct==1)
{
int vexNum = 0;
int arcNum = 0;
while(true) {
System.out.print("请输入要建立无向图的总顶点数和总边数,以空格隔开:");
try {
vexNum = scan.nextInt();
arcNum = scan.nextInt();
break;
} catch (Exception e) {
System.out.println("输入不合法!");
continue;
}
}
UnGraph aMGraph = new UnGraph(vexNum, arcNum);
System.out.println("由深度优先遍历得:");
aMGraph.dFSTraverse();
System.out.println("由广度优先遍历得:");
aMGraph.bFSTraverse();
scan.close();
}
else if(Direct==2)
{
DirGraph.Dirgraph a = new DirGraph.Dirgraph(6);
a.addEdge(0, 1);
a.addEdge(0, 3);
a.addEdge(1, 2);
a.addEdge(2, 5);
a.addEdge(3, 2);
a.addEdge(4, 3);
a.addEdge(4, 2);
System.out.println(a);
DirGraph.DirectedDFS dfsa = new DirGraph.DirectedDFS(a);
//第一种方法检查环
System.out.println("是否存在环?");
System.out.println(dfsa.hasCycle());
System.out.println();
System.out.println("拓扑排序序列:");
for (Integer integer : dfsa.Topological()) {
System.out.print(integer + " ");
}
System.out.println("\n由深度优先遍历得:");
dfsa.DFS(0);
System.out.println("由广度优先遍历得:");
DirGraph.BFS bfsa=new DirGraph.BFS(a);
bfsa.bfs(0);
}
}
在前面我们所介绍的树的数据结构中,我们可以明显感觉到,树的表示是分层的,例如父子关系,而其他关系只能间接的表示,例如同级关系。而图却不受这种限制。图是由顶点(或结点)及顶点之间的关系组成的集合。通常,图中的顶点数量或者一个顶点与其他顶点之间的连线的个数不受限制。(C++数据结构与算法)
由一组顶点和一组能够将两个顶点相连的边组成的。
由一组顶点和一组有方向的边组成,每条有方向的边都连接着有序的一对顶点。
图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)
完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环
完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出
此处选用了Prim算法
完成有向图的单源最短路径求解(迪杰斯特拉算法)
HashMap
?HashMap
。Map<String, ArrayList<String>> graph = new HashMap<String, ArrayList<String>>(arr.length);//根据字符串数组arr构造图
for (String str : arr) {
graph.put(str, new ArrayList<String>());
}
HashMap在JDK1.8之前的实现方式 数组+链表,但是在JDK1.8后对HashMap进行了底层优化,改为了由 数组+链表+红黑树实现,主要的目的是提高查找效率。具体参考数据结构解析-HashMap.
20182303 2019-2020-1 《数据结构与面向对象程序设计》实验9报告
标签:思路 间接 代码 根据 length 深度优先遍历 最短路径 问题 入栈
原文地址:https://www.cnblogs.com/zdyyy/p/12007484.html