如何通过结对编程与Git实战提升软件工程实验技能?

摘要:Lab 1实验报告 实验要求 1 .读入文本并生成有向图: 将文本数据转换为有向图结构,各单词作为节点,有向边表示单词在文本中的相邻关系及其出现次数。 2. 展示有向图: 图形化展示生成的有向图,并可保存为图形文件。 3. 查询桥接词: 查
Lab 1实验报告 实验要求 1 .读入文本并生成有向图: 将文本数据转换为有向图结构,各单词作为节点,有向边表示单词在文本中的相邻关系及其出现次数。 2. 展示有向图: 图形化展示生成的有向图,并可保存为图形文件。 3. 查询桥接词: 查询两个单词之间的桥接词,即图中存在两条边word1→word3和word3→word2,则称word3为word1和word2的桥接词。 4. 根据桥接词生成新文本: 在输入的新文本中插入旧图得到的桥接词,生成新的文本。 5. 计算两个单词之间的最短路径: 计算图中两个单词之间的最短路径,并突出显示路径。 6. 随机游走: 从图中随机选择一个节点,进行随机游走,记录路径并展示结果。 待求解问题描述 输入数据: 是纯英文的一个txt文件,可分为多行。读取文本时,换行符、回车符、标点符号以及任何非字母字符均被忽略,仅仅读入单词。 输出数据: 一个有向图,且支持依据该图进行多种操作。具体的输出有: 展示有向图、查询桥接词、根据桥接词生成新文本、计算最短路径、随机游走路径。 约束条件: 1. 有向图的结点为文本的单词,边的方向体现文本中相邻两个单词出现的顺序,边的权重体现按此顺序相邻的一对单词的出现次数, 2. 所有的操作均在文本文件生成的有向图上进行。 3. 程序以命令行或GUI方式交互,并满足所有功能需求。 算法与数据结构设计 设计思路与算法流程图 模块1:根据文本生成图 算法步骤: 打开并读取文本文件。 将文本中的所有非字母字符替换为空格,并将其转换为小写。 按空格分割文本,生成单词数组。 遍历单词数组,相邻的单词之间生成边。 将每对相邻单词添加到图中,并记录边的权重(即相邻出现的次数)。 流程图: 模块2:展示图 算法步骤: 初始化图形界面组件。 计算每个节点的位置(例如,圆周分布)。 绘制每个节点及其标签。 遍历图的边,绘制每条边及其权重。 如果是有向图,绘制箭头表示方向。 流程图: 模块3:查询桥接词 算法步骤: 输入两个单词 word1 和 word2。 检查这两个单词是否在图中。 遍历 word1 的邻接节点,检查是否有共同的邻接节点与 word2 相连。 如果找到,记录并返回桥接词列表;否则,返回提示信息。 流程图: 模块4:根据桥接词生成新文本 算法步骤: 输入新文本。 将新文本按空格分割成单词数组。 遍历新文本的每对相邻单词。 查找每对相邻单词的桥接词,并将其插入两者之间。 返回新的文本。 流程图: 模块5:计算最短路径 算法步骤: 输入起始单词和终止单词。 使用 Dijkstra算法计算最短路径。(具体算法流程在流程图给出) 返回最短路径及其长度。 流程图: 模块6:随机游走 算法步骤: 选择起始节点 执行随机游走 返回游走路径。 流程图: 数据结构设计 主要使用了以下几种数据结构来构建和操作有向图: Map (HashMap):用于存储图的邻接表和节点。 Node:表示图中的节点。 PriorityQueue:用于实现 Dijkstra 算法的优先队列。 有向图的数据结构  Node 类: word:表示节点的名称或标识符,这里是一个单词。 distance:用于 Dijkstra 算法,表示从起点到该节点的当前已知最短距离。  Graph 类: nodes:使用 Map<String, Node> 来存储图中的所有节点,键是节点的名称,值是节点对象。 adjList:使用 Map<String, Map<String, Integer>> 来表示邻接表,键是节点的名称,值是一个嵌套的 Map,表示该节点的邻接节点及其边的权重。 Dijkstra 算法的数据结构 PriorityQueue:用于实现 Dijkstra 算法的优先队列。 PriorityQueue<Node> queue = new PriorityQueue<>(Comparator.comparingInt(Node::getDistance)); distances 和 previousNodes:用于记录从起点到每个节点的最短距离和路径。
阅读全文