- 浏览: 914944 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
近由于项目需要,需要实现深度优先和广度优先算法,图论中的基础内容,源代码共享一下,希望对大家有用:
- public class Graph {
- private final int MAX_VERT=500;
- private Node nodelist[];
- private int adjMat[][];
- private int nverts;
- private Stack theStack;
- private Queue theQuene;
- public Graph(){
- //顶点数组
- nodelist=new Node[MAX_VERT];
- //邻接矩阵
- adjMat = new int[MAX_VERT][MAX_VERT];
- nverts=0;
- for(int i=0;i<MAX_VERT;i++){
- for(int j=0;j<MAX_VERT;j++){
- adjMat[i][j]=0;
- }
- }
- theStack=new Stack();
- theQuene=new LinkedList();
- sortedArray = new BusSiteBean[MAX_VERT];
- }
- /**
- * 增加一定点
- * @param node
- */
- public void addNode(Node node){
- nodelist[nverts++]=node;
- }
- /**
- * 增加一边
- * @param start
- * @param end
- */
- public void addEdge(int start,int end){
- adjMat[start][end]=1;
- //有向图
- //adjMat[end][start]=1;
- }
- public int getAdjUnVisited(int v){
- for(int j=0;j<nverts;j++){
- if(adjMat[v][j]==1&&nodelist[j].isWasVisited()==false){
- return j;
- }
- }
- return -1;
- }
- /**
- * 深度优先搜索算法
- */
- public void dfs(){
- nodelist[0].setWasVisited(true);
- displayNode(0);
- theStack.push(0);
- while(!theStack.isEmpty()){
- int v=((Integer)theStack.peek()).intValue();
- v=getAdjUnVisited(v);
- if(v==-1){
- theStack.pop();
- }else{
- nodelist[v].setWasVisited(true);
- displayNode(v);
- theStack.push(v);
- }
- }
- for(int j=0;j<nverts;j++){
- nodelist[j].setWasVisited(false);
- }
- }
- /**
- * 广度优先搜索算法
- */
- public void bfs(){
- this.nodelist[0].setWasVisited(true);
- this.displayNode(0);
- this.theQuene.add(0);
- int v2;
- while(!this.theQuene.isEmpty()){
- int v1=((Integer)this.theQuene.remove()).intValue();
- while((v2=this.getAdjUnVisited(v1))!=-1){
- this.nodelist[v2].setWasVisited(true);
- displayNode(v2);
- this.theQuene.add(v2);
- }
- }
- for(int j=0;j<nverts;j++){
- nodelist[j].setWasVisited(false);
- }
- }
- private int noSuccessors(){
- boolean isEdge;
- for(int row=0;row<this.nverts;row++){
- isEdge=false;
- for(int col=0;col<this.nverts;col++){
- if(adjMat[row][col]>0){
- isEdge=true;
- break;
- }
- }
- if(!isEdge)
- return row;
- }
- return -1;
- }
- /**
- * 有向图拓扑
- */
- public void poto(){
- int orig_nverts=this.nverts;
- while(this.nverts>0){
- int currentNode=noSuccessors();
- if(currentNode==-1){
- System.out.println("Graph 有环");
- return;
- }
- sortedArray[this.nverts-1]=nodelist[currentNode].getBs();
- deleteNode(currentNode);
- }
- for(int j=0;j<orig_nverts;j++){
- System.out.print(sortedArray[j]);
- }
- }
- private void deleteNode(int delVert){
- if(delVert!=this.nverts-1){
- for(int j=delVert;j<this.nverts-1;j++)
- this.nodelist[j]=this.nodelist[j+1];
- for(int row=delVert;row<this.nverts-1;row++)
- moveRowUp(row,this.nverts);
- for(int col=delVert;col<this.nverts-1;col++)
- moveRowLeft(col,this.nverts-1);
- }
- this.nverts--;
- }
- private void moveRowUp(int row,int length){
- for(int col=0;col<length;col++)
- adjMat[row][col]=adjMat[row+1][col];
- }
- private void moveRowLeft(int col,int length){
- for(int row=0;row<length;row++)
- adjMat[row][col]=adjMat[row][col+1];
- }
- public void displayNode(int v){
- System.out.println(nodelist[v].getBs().toString());
- }
- public static void main(String[] args) {
- Graph g=new Graph();
- g.addNode(new Node(new BusSiteBean("A")));
- g.addNode(new Node(new BusSiteBean("B")));
- g.addNode(new Node(new BusSiteBean("C")));
- g.addNode(new Node(new BusSiteBean("D")));
- g.addNode(new Node(new BusSiteBean("E")));
- g.addNode(new Node(new BusSiteBean("F")));
- g.addNode(new Node(new BusSiteBean("G")));
- g.addNode(new Node(new BusSiteBean("H")));
- g.addEdge(0, 3);
- g.addEdge(0, 4);
- g.addEdge(1, 4);
- g.addEdge(2, 5);
- g.addEdge(3, 6);
- g.addEdge(4, 6);
- g.addEdge(5, 7);
- g.addEdge(6, 7);
- g.poto();
- }
- }
发表评论
-
不使用/,%,+和*,如何判断一个数能否被3整除
2012-05-30 14:28 1788如果n的二进制末位为0,那么n和n>>1同时被 ... -
一些数学知识
2012-03-31 20:12 858zz:http://hi.baidu.com/imak ... -
高阶幂的求余的方法
2012-03-31 16:41 2784通常会有如下问法: 有两个数,A和B,A的范围 ... -
从N个变量中找出一个错误变量的方法
2012-03-31 12:17 863假设有N包咖啡,里面有一包咖啡是掺和了沙子的,可以将咖啡放到水 ... -
【转】大数据量算法
2012-03-06 16:11 1248第一部分、十五道海量数据处理面试题 1. 给定a、b两个 ... -
链表的一些常见笔试面试问题总结及代码
2010-10-27 13:39 1095先什么也不说,假设链 ... -
Trie Tree
2010-10-26 11:34 1478给你100000个长 ... -
字典树(trie tree)
2010-10-26 11:19 1390今天AC了两题tri ... -
高度为n的平衡二叉树最少需要多少个节点
2010-10-24 13:42 9445递推关系 A(1)=1 A(2)=2 A ... -
如何判断两个单向链表是否有相交,并找出交点
2010-10-24 13:37 1708题比较简单,单向链表有交点意思就是交点后的节点都是 ... -
大数据排序或取重或去重相关问题解决方案
2010-10-21 16:13 2777Q:TC群里有人发消息说在10亿个数据中找出所有的重复数,内存 ... -
分配排序(桶排序..)
2010-10-21 13:39 1888分配排序的基本思想:排序过程无须比较关键字,而是通过&qu ... -
Rete(3)
2010-10-21 09:59 9794.6 连接节点(Join node) ... -
Rete(2)
2010-10-21 09:57 1183使用RETE算法的模块系统 ... -
Rete(1)
2010-10-21 09:53 1065一、 rete概述Rete算法是一种前向规则快速匹配算法,其匹 ... -
[转]海量数据处理面试题
2010-10-20 15:15 10311. 给定a、b两个文件,各存放50亿个url,每个url各占 ... -
用JDBC实现数据的分页
2010-10-20 11:23 1229数据分页主要用到了resultSet的absolute()方法 ... -
如何求N的阶乘所得的数字末尾含有多少个0
2010-10-19 13:13 2190原题是这样: 给定 ... -
数据库笔试题(经典SELECT语句用法)
2010-10-18 22:49 2115问题描述: 为管理岗位业务培训信息,建立3个表: S ... -
Java分页实现
2010-10-18 22:11 1508Java代码 public interf ...
相关推荐
本资源“MATLAB源码集锦-基于BFS广度优先搜索算法代码”是专门为MATLAB用户提供的,旨在帮助他们理解和实现BFS算法。 BFS算法的基本思想是从起点开始,首先访问其所有邻居,然后访问这些邻居的邻居,以此类推,直到...
这个项目采用了一种名为广度优先搜索(BFS)的算法,这是一种在图论和计算机科学中广泛使用的搜索策略。接下来,我们将深入探讨广度优先搜索算法以及如何在三维空间中应用它来规划无人机的飞行路径。 首先,广度...
例如,通过图的遍历算法(如深度优先搜索或广度优先搜索)来模拟数据包的传播,找出网络中的瓶颈或潜在问题。 压缩包内的“路由算法”文件可能包含了不同路由算法的实现源代码,这为我们提供了学习和研究的机会。...
2. **遍历算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS)。DFS用于寻找图中的路径,而BFS则常用于寻找最短路径或最小生成树问题。在MATLAB中,可以通过递归或队列实现这两种遍历。 3. **最短路径算法**:...
深度优先搜索是图论和树结构中的一种遍历策略,它深入探索树或图的分支,尽可能深地搜索树的分支,直到找到解决方案或者回溯到没有其他分支可走为止。 迷宫问题是一个经典的图论问题,通常可以用二维数组或者邻接...
5. 连通性检测:通过深度优先搜索(DFS)或广度优先搜索(BFS)来判断图是否连通,以及找出连通分量。 6. 桥与割点:桥是指删除后会导致图不连通的边,割点是删除后会增加连通分量数的顶点。识别桥和割点有助于理解...
7. 图的遍历:深度优先搜索(DFS)和广度优先搜索(BFS)是图遍历的两种基本策略,用于访问图的所有顶点。MATLAB中可以自定义函数实现这两种遍历方法。 通过学习并理解这些算法的MATLAB实现,不仅可以加深对图论的...
深度搜索(Depth First Search, DFS)和广度搜索(Breadth First Search, BFS)是图论和树形结构中常用的两种遍历算法,它们在计算机科学中有着广泛的应用,如解决路径查找、拓扑排序、最短路径等问题。本文将详细...
3. **搜索算法**:搜索算法包括顺序搜索、二分查找、深度优先搜索(DFS)、广度优先搜索(BFS)等。这些算法在解决查找问题时有重要作用,源码会展示它们的执行流程和优化技巧。 4. **图论算法**:图论在许多复杂...
在源码中,你可以找到各种经典算法的实现,包括但不限于排序算法(如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等)、搜索算法(如二分查找、深度优先搜索、广度优先搜索等)、图论算法(如最短路径...
在MATLAB中,可以通过邻接矩阵或邻接表表示图,并利用深度优先搜索(DFS)或广度优先搜索(BFS)判断图是否连通。 3. **匹配问题**: 匹配问题关注的是在图中找到尽可能多的非相交边集,使得每条边的两端都未被其他边...
2. **图遍历算法**:图遍历是指遍历图中的所有节点,常见的有深度优先搜索(DFS)和广度优先搜索(BFS)。DFS适合寻找连通性,BFS则常用于找最短路径。这些算法在数据结构和算法中占有重要地位,可用于搜索、求解迷宫等...
C#算法类库涵盖了排序算法(如快速排序、归并排序、冒泡排序、插入排序)、搜索算法(如二分查找、广度优先搜索、深度优先搜索)、图论算法(如最短路径算法Dijkstra、拓扑排序)、动态规划、贪心算法等多种类型,...
4. **图论算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS),以及Dijkstra算法、Floyd-Warshall算法等,用于解决网络、路由和最短路径问题。 5. **字符串处理**:C语言中的KMP算法用于字符串匹配,Trie树用于...
分支限界法通常采用广度优先搜索或深度优先搜索策略,并结合优先队列来控制搜索方向。 压缩包中的程序源码提供了实际的实现示例,可以帮助学习者深入理解上述算法的逻辑和运行过程。通过阅读和分析这些代码,学生...
深度优先搜索(Depth-First Search, DFS)是一种用于遍历或搜索树或图的算法,其基本思想是从起点开始,尽可能深地探索图的分支,直到达到叶子节点或回溯到一个未被访问的邻接节点。在Matlab中实现DFS可以帮助解决...
在压缩包中,可能包含了排序算法(如快速排序、归并排序、堆排序)、搜索算法(如二分查找、广度优先搜索、深度优先搜索)、数据结构(如链表、树、图、哈希表)的实现。学习这些算法,不仅可以提升我们的编程技能,...
其次,搜索算法也是必不可少的部分,比如二分查找、深度优先搜索(DFS)和广度优先搜索(BFS)。这些搜索算法在处理大量数据时能大大提高效率,例如在有序数组中查找特定元素,或者在图或树结构中遍历节点。 此外,...
图论算法也是源码包中可能包含的内容,例如深度优先搜索(DFS)和广度优先搜索(BFS)用于遍历图或树结构,Dijkstra算法和A*算法用于求解最短路径问题,Floyd-Warshall算法用于求解所有顶点对间的最短路径。...
图论部分可能涵盖深度优先搜索(DFS)和广度优先搜索(BFS),以及最小生成树(Prim或Kruskal算法)、最短路径(Dijkstra算法或Floyd-Warshall算法)等。这些算法在解决实际问题,如网络路由、社交网络分析等方面有...