java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法

public class City

{

String name;

int id;

static int idCounter = 0;

public City(String name)

{

this.name=name;

id = idCounter++;

}

}

import java.util.ArrayList;

public class Graph {

public static void main(String[] args)

{

// TODO Auto-generated method stub

Map M = new Map(12);

City a = new City(“a”);

City b = new City(“b”);

City c = new City(“c”);

City d = new City(“d”);

City e = new City(“e”);

City f = new City(“f”);

City g = new City(“g”);

City h = new City(“h”);

City i = new City(“i”);

City j = new City(“j”);

City k = new City(“k”);

City l = new City(“l”);

M.createEdge(a,b,3);

M.createEdge(a,c,5);

M.createEdge(a,d,4);

M.createEdge(b,f,6);

M.createEdge(c,d,2);

M.createEdge(c,g,4);

M.createEdge(d,e,1);

M.createEdge(d,h,5);

M.createEdge(e,f,2);

M.createEdge(e,i,4);

M.createEdge(f,j,5);

M.createEdge(g,h,3);

M.createEdge(g,k,6);

M.createEdge(h,i,6);

M.createEdge(h,k,7);

M.createEdge(i,j,3);

M.createEdge(i,l,5);

M.createEdge(j,l,9);

M.createEdge(k,l,8);

System.out.println(“the graph is:\n”);

System.out.println(M);

System.out.println();

System.out.println(“findPathByDFS:a to k”);

M.findPathByDFS(a,k);

System.out.println();

System.out.println(“findPathByBFS:a to k”);

M.findPathByBFS(a,k);

System.out.println();

System.out.println(“bellmanFord from a:”);

M.bellmanFord(a);

System.out.println();

System.out.println(“dijkstra from a:”);

M.dijkstra(a);

System.out.println();

System.out.println(“bellmanFord,print example from a:”);

M.floydWarshall();

M.printFloydWarshallForOneCity(a);

}

}

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.Queue;

public class Map

{

double[][] A;

public Map(int n)

{

A = new double[n][n];

for(int i = 0;i < A.length;i++)

{

for(int j = 0;j < A.length;j++)

{

if(i == j) A[i][j] = 0;

else A[i][j] = -1;

}

}

}

ArrayList cities = new ArrayList();

private double[] D;

private void relax(int u,int v)

{

if(D[v]>D[u]+A[v][u])

D[v]=D[u]+A[v][u];

}

private double[][] DD = null;

public void floydWarshall()

{

DD = new double[A.length][A.length];

int i,j,k;

for(i = 0;i < A.length;i++)

{

for(j = 0;j < A.length;j++)

{

if(A[i][j]>0)

DD[i][j] = A[i][j];

else if(i == j) DD[i][j] = 0;

else DD[i][j] = 99999999;

}

}

for(k = 0;k < A.length;k++)

for(i = 0;i < A.length;i++)

for(j = 0;j < A.length;j++)

{

if(DD[i][j] > DD[i][k] + DD[k][j])

{

DD[i][j] = DD[i][k] + DD[k][j];

}

}

}

public void printFloydWarshallForOneCity(City city)

{

System.out.println(“floydWarshall:”);

if(DD == null)

{

floydWarshall();

}

for(int i=0;i

{

System.out.printf(“from %s to %s shortest path is:%f\n”,city.name,cities.get(i).name,DD[city.id][i]);

}

}

public void dijkstra(City city)

{

dijkstra(city.id);

System.out.println(“dijkstra:”);

for(int i=0;i

{

System.out.printf(“from %s to %s shortest path is:%f\n”, city.name,cities.get(i).name,D[i]);

}

}

public void dijkstra(int srcId)

{

D = new double[A.length];

for(int i=0;i

{

D[i]=999999999;

}

D[srcId]=0;

int[] q = new int[A.length];

int ql=0,qf=0; //队列

for(int i=0;i

while(qf!=ql)

{

int min=qf;

for(int i=qf;i

{

if(D[q[i]]

{

min=i;

}

}

int id = q[qf];

q[qf] = q[min];

q[min] = id; //q[qf] is the min

int u=q[qf++];

for(int i=0;i

{

if(A[u][i]>0)

{

relax(u,i);

}

}

}

}

public void bellmanFord(City city)

{

bellmanFord(city.id);

System.out.println(“bellmanFord:”);

for(int i=0;i

{

System.out.printf(“from %s to %s shortest path is:%f\n”, city.name,cities.get(i).name,D[i]);

}

}

public void bellmanFord(int srcId)

{

D = new double[A.length];

for(int i=0;i

{

D[i] = 99999999;//无穷大

}

D[srcId] = 0;

for(int i=0;i

{

for(int j=0;j

{

for(int k=0;k

{

if(A[j][k]>0)

{

relax(j,k);

}

}

}

}

}

Queue bfsQueue = new LinkedList();

boolean[] bfsFlag;

int bsfPre[];

public void findPathByBFS(City src,City dst)

{

System.out.printf(“bfs find path between ‘%s’ and ‘%s’!\n”,src.name,dst.name);

findPathByBFS( src.id, dst.id);

printBFS(dst.id);

}

public void findPathByBFS(int srcId,int dstId)

{

bsfPre = new int[A.length];

bfsQueue.clear();

bfsFlag = new boolean[A.length];

for(int i=0;i

{

bfsFlag[i] = false;

bsfPre[i] = -1;

}

bfsQueue.offer(srcId);

bfsFlag[srcId] = true;

while(!bfsQueue.isEmpty())

{

int current = bfsQueue.poll();

for(int index=0;index

{

if(current == index) continue;

if(A[current][index]>0) //两者相连

{

if(index == dstId)//找到目标了

{

bfsFlag[index] = true;

bsfPre[index] = current;

return;//直接返回

}

if(bfsFlag[index] == false)//如果未访问过

{

bfsFlag[index] = true;

bsfPre[index] = current;

bfsQueue.offer(index);

}

}

}

}

}

private void printBFS(int dstId)

{

int index = dstId;

do

{

System.out.printf(“

index = bsfPre[index];

}while(index != -1);

System.out.println();

}

ArrayList dfsPath = new ArrayList();

boolean[] dfsFlag;

private void printDFS()

{

for(Integer node:dfsPath)

{

System.out.printf(“->%s”, cities.get(node).name);

}

System.out.println();

}

public void findPathByDFS(City src,City dst)

{

System.out.printf(“dfs find path between ‘%s’ and ‘%s’!\n”,src.name,dst.name);

findPathByDFS(src.id, dst.id);

}

public void findPathByDFS(int srcId,int dstId)

{

dfsPath.clear();

dfsFlag = new boolean[A.length];

for(int i=0;i

{

dfsFlag[i] = false;

}

dfsPath.add(srcId);

dfsFlag[srcId] = true;

dfs( srcId, dstId);

printDFS();

}

private void dfs(int srcId,int dstId)

{

for(int index=0;index

{

if(srcId == index) continue;

if(A[srcId][index]>0)//两者连接

{

if(index == dstId)//找到目标了

{

dfsFlag[index] = true;

dfsPath.add(index);

return;

}

if(dfsFlag[index] == false)//如果该节点未访问过

{

dfsFlag[index] = true;

dfsPath.add(index);

dfs(index,dstId);

if(dfsFlag[dstId] == false)//目标没找到

dfsPath.remove(index);

else return;

}

}

}

}

public void createEdge(City a, City b, double w)

{

A[a.id][b.id]=w;

A[b.id][a.id]=w;//added by me!

cities.add(a.id,a);

cities.add(b.id,b);

}

public String toString()

{

String r = “I am a map of ” + A.length + ” cities.”;

r += ” My connections are:\n”;

for (int i=0;i

{

for (int j=0;j

深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...相关推荐

  1. 深度搜索 java_Java中的深度优先搜索

    1. 概述 在本教程中,我们将探讨Java中的深度优先搜索 深度优先搜索(DFS)是一个应用于树.图等数据结构的遍历算法.在移动到下一个分支之前,深度优先搜索会 深度为优先原则去探索新的分支. 在接下 ...

  2. 深度遍历 java_java 图论一 深度遍历和广度遍历

    图对建模很有帮助. 图的基本知识: Java实现图的两种方法 1邻接矩阵 邻接矩阵是用二维数据,使用1代表节点间有边,如下表格: A B C D A 0 1 1 1 B 1 0 0 1 C 1 0 0 ...

  3. 深度学习核心技术精讲100篇(三十一)-大众点评搜索基于知识图谱的深度学习排序实践

    1. 引言 挑战与思路 搜索是大众点评App上用户进行信息查找的最大入口,是连接用户和信息的重要纽带.而用户搜索的方式和场景非常多样,并且由于对接业务种类多,流量差异大,为大众点评搜索(下文简称点评搜 ...

  4. 领域应用 | 大众点评搜索基于知识图谱的深度学习排序实践

    本文转载自公众号:美团技术团队. 本文介绍了大众点评搜索核心排序层模型的演化之路,包括结合知识图谱信息构建适合搜索场景的Listwise深度学习排序模型LambdaDNN以及特征工程实践和相关工具建设 ...

  5. 美团技术团队-大众点评搜索基于知识图谱的深度学习排序实践

    美团技术团队博客网址:https://tech.meituan.com/2019/02/28/root-clause-analysis.html 1. 引言 挑战与思路 搜索是大众点评App上用户进行 ...

  6. 大众点评 App 搜索基于知识图谱的深度学习排序实践

    点击"开发者技术前线",选择"星标????" 13:21 在看|星标|留言,  真爱 本文授权转载自:美团技术博客 本文介绍了大众点评搜索核心排序层模型的演化之 ...

  7. 【深度学习】最新「深度学习社区发现」综述论文,174篇文献概述六大类方法(含Github资源)...

    | 作者:Xing Su | 单位:麦考瑞大学 | 研究方向:人工智能与数据科学 社区发现能够揭示各类网络中成员的特征与联系,在网络分析中具有重要意义.近年来,深度学习技术在发现社区结构时,以处理高维 ...

  8. 深度学习实践:计算机视觉_深度学习与传统计算机视觉技术:您应该选择哪个?

    深度学习实践:计算机视觉 计算机视觉 (Computer Vision) Deep Learning(DL) is undeniably one of the most popular tools u ...

  9. 专访头条搜索:从推荐到搜索,如何构建搜索技术的另一种可能?

    今日头条又将搜索业务往前推进了一步.4 月 30 日,今日头条宣布上线"头条百科"测试版.界面简洁,除了搜索框外,只有一个 Slogan:" 来这里,认识世界!" ...

最新文章

  1. 无需用眼,大脑直接成像,失明的人也能重新「看见」|Science
  2. php 下载网络文件,PHP实现文件下载
  3. 关于Android消息机制你所需要知道的
  4. halcon的算子清点:Chapter 10 3d匹配
  5. 苹果html抓包,苹果被开发者“抓包”违反了自己定的规则
  6. Python:学习笔记之多值参数(函数中*传递元组**传递字典)案例演练
  7. 为什么我离开了管理岗位
  8. 【VS2017】VS2017离线安装教程
  9. 服务器支持vrrp,【交换机在江湖对接案例】配置VRRP备份组对接NLB服务器群集示例(通过物理链路环回方法)...
  10. linux下解压zip文件命令
  11. 原生JS实现canvas移动端电子签名板/画板
  12. MES系统在汽车零部件行业的应用
  13. php frameset不显示,php加载frameset页面时显示空白怎么办_后端开发
  14. php出生年月日怎么写,出生年月日五行查询表,五行属性查询表
  15. 老文新读 | 大数据于国内影视行业的意义及应用
  16. 小程序FMP优化实录,附小技巧
  17. 陕西渭南有什么小吃_爱问知识人
  18. 《中国聚合支付行业发展报告2018》发布 深度分析未来八大趋势
  19. 用这个公式编辑器可以打出标准的绝对值公式
  20. 单例模式的两种实现方式:恶汉式和懒汉式

热门文章

  1. PyTorch系列入门到精通——生成对抗网络一瞥
  2. WampServer服务器离线问题的解决方法
  3. 浙大 PAT 乙级1055
  4. python科学计算教学_Python最好用的科学计算库:NumPy快速入门教程(二)
  5. Redis基础(十)——性能监控和监视器
  6. eclipse离线安装Activiti Designer插件
  7. el表达式 多条件判断
  8. 美丽联合与腾讯云签署战略协议 全面借助腾讯云打造智慧时尚电商平台
  9. 量子计算机张庆瑞讲座报告,燕山大学彭秋明、张庆瑞教授来我校开展学术交流...
  10. java中获取路径_java中获取路径的几种基本的方法