ImageVerifierCode 换一换
格式:DOC , 页数:10 ,大小:73.50KB ,
资源ID:2991104      下载积分:150 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-2991104.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java 图的深度优先和广度优先搜索以及关键路径.doc)为本站会员(11****ws)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

java 图的深度优先和广度优先搜索以及关键路径.doc

1、package 数据结构.图的邻接表法;/*思路(这是一个无向图):* 1、从命令行接收增加节点数把它放在一个一维数组中* 2、增加边数,同时找这个边是否在图中,若在,就构造邻接表*/import java.util.ArrayList;import java.util.Scanner;import java.util.Stack;class ArcNode / 表结点int info; / 该弧相关信息的指针int adjvex; / 邻接点域ArcNode next; / 指向下一条弧的指针public ArcNode(int adjvex, int info) / 构造函数this.ad

2、jvex = adjvex;this.info = info;this.next = null;class VNode / 头结点int data; / 顶点信息(如数据等)ArcNode firstarc; / 指向第一条依附该顶点的边的弧指针public VNode(int data) / 构造函数this.data = data;this.firstarc = null;class ALGraph ArrayList vertces = new ArrayList(); / 存放图顶点信息的数组int vexnum;/ 图的当前顶点数int arcnum;/ 图的弧数public ALG

3、raph() / 构造函数this.arcnum = 0;this.vexnum = 0;public class ALGraphMain ALGraph g = new ALGraph();LinkQueue q = new LinkQueue(); / 广度优先搜索栈LinkStack linkStack = new LinkStack(); / 拓扑排序顶点栈LinkStack linkStackT = new LinkStack(); / T 为拓扑序列顶点栈LinkStack linkStackS = new LinkStack(); / S 为零入度顶点栈ArrayList vis

4、itedDFS = new ArrayList(); / 深度优先访问标志数组ArrayList visitedBFS = new ArrayList(); / 广度优先访问标志数组ArrayList indegree = new ArrayList(); / 存放顶点入度的数组ArrayList indegreeCritical = new ArrayList(); / 存放关键路径的顶点入度的数组ArrayList early = new ArrayList(); / 顶点最早开始时间数组ArrayList last = new ArrayList(); / 顶点最晚开始时间数组void

5、add_vex() / 增加节点数System.out.println(“输入无向图的顶点数“);Scanner scanner = new Scanner(System.in);g.vexnum = scanner.nextInt();System.out.println(“输入顶点信息:“);for (int i = 0; i = g.vexnum)return -1;return i;void CreatUDN() add_vex(); / 增加顶点数add_arc(); / 增加边数/* 思路:先输出当前顶点,如果下一条邻接顶点不为空,则输出 */void printAdjList()

6、 / 输出邻接表int i;ArcNode p;System.out.println(“编号t 顶点t 邻点编号“);for (i = 0; i = 0; w = NextAdjvex(this.g.vertces.get(v).data, this.g.vertces.get(w).data) if (this.visitedDFS.get(w) = false) DFS(w);/* 基本实现思想 (1)顶点 v 入队列。 (2)当队列非空时则继续执行,否则算法结束。 (3)出队列取得队头顶点 v;访问顶点 v 并标记顶点 v 已被访问。* (4)查找顶点 v 的第一个邻接顶点 w。 (5)

7、若 v 的邻接顶点 w 未被访问过的,则 w 入队列。* (6)继续查找顶点 v 的另一个新的邻接顶点 w,转到步骤( 5) 。 直到顶点 v 的所有未被访问过的邻接点处理完。转到步骤(2) 。* 广度优先遍历图是以顶点 v 为起始点,由近至远,依次访问和 v 有路径相通而且路径长度为 1,2,的顶点。* 为了使“先被访问顶点的邻接点”先于“后被访问顶点的邻接点”被访问,需设置队列存储访问的顶点。* * 伪代码 (1)初始化队列 Q;visitedn=0; (2)访问顶点 v;visitedv=1 ;顶点v 入队列 Q; (3)* while(队列 Q 非空) v=队列 Q 的对头元素出队;

8、w=顶点 v 的第一个邻接点; while(w 存在) 如果 w 未访问,则访问顶点 w;* visitedw=1; 顶点 w 入队列 Q; w=顶点 v 的下一个邻接点。*/private void BFS() / 广度优先搜索int u;for (int i = 0; i = 0; w = NextAdjvex(this.g.vertces.get(u).data,this.g.vertces.get(w).data)if (this.visitedBFS.get(w) = false) / 如果 w 顶点未被访问,则w 顶点入队列this.visitedBFS.set(w, true);

9、System.out.print(g.vertces.get(w).data + “ “);q.EnQueue(w); / w 顶点入队列private void FindInDegree() / 输出入度数for (int i = 0; i this.early.get(k) / 求最早发生时间this.early.set(k, this.early.get(j) + p.info);if (count g.vexnum) / 如果入栈顶点数小于图的顶点数,则图中有环路return false; else return true;private void CriticalPath() / 关

10、键路径ArcNode p;int k;int ee; / 每条弧的最早开始时间int el; / 每条弧的最晚开始时间if (!TopologicalOrder() System.out.println(“图中有环路“);for (int i = 0; i g.vexnum; i+) /初始化最晚开始时间this.last.add(this.early.get(g.vexnum - 1);System.out.print(“输出最早开始时间:“);for (int i = 0; i g.vexnum; i+) System.out.print(early.get(i) + “ “);Syste

11、m.out.println();while (!linkStackT.IsEmpty() / 出栈求最晚开始时间int j = linkStackT.Pop();for (p = g.vertces.get(j).firstarc; p != null; p = p.next) k = p.adjvex;if (last.get(k) - p.info last.get(j) / 活动最晚开始时间last.set(j, last.get(k) - p.info); / for/ whileSystem.out.print(“输出最晚开始时间:“);for (int i = 0; i g.vex

12、num; i+) System.out.print(last.get(i) + “ “);System.out.println();for (int i = 0; i g.vexnum; i+) / 求 ee 和 el 以及关键路径for (p = g.vertces.get(i).firstarc; p != null; p = p.next) k = p.adjvex;ee = early.get(i);el = last.get(k) - p.info;if (ee = el) / 若某条弧满足条件 ee=el,则为关键活动。System.out.println(g.vertces.ge

13、t(i).data + “到“+ g.vertces.get(k).data + “长度为:“ + p.info+ “ 发生时间为:“ + ee);/ forpublic static void main(String args) ALGraphMain agp = new ALGraphMain();agp.CreatUDN();agp.printAdjList();System.out.print(“图的深度优先遍历为:“);agp.DFSTraverse();System.out.println();System.out.print(“图的广度优先遍历为:“);agp.BFS();System.out.println();System.out.print(“各顶点入度为:“);agp.FindInDegree();System.out.println();System.out.print(“图的拓扑排序为:“);agp.TopologicalSort();System.out.println();System.out.println(“图的关键路径为:“);agp.CriticalPath();System.out.println();

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。