搜索算法
算法是作用于具体的数据结构之上的,深度优先搜索和广度优先搜索都是基于图这种数据结构的。他们是两种最简单、最暴力的搜索。
1.广度优先搜索(Breadth- First-Search)
广度优先搜索(Breadth- First-Search),地毯式 层层推进的搜索策略,即现查找离起始点最近的,然后是次近的,一次往外搜索。
六度分割理论
并不是说任何人与人之间的联系必须要通过六个层析才会产生联系,而是表达了这样一个重要的概念,任何素不相识的人之间,通过一定的联系方式,总能产生必然联系或者关系。
图这种数据结构一般都会用在社交网络中,二根据六度分割理论,可以抽像为,你好友的好友的好友的好友的好友的好友有谁,社交网络中的通常通过好友的好友的关系来给你推荐”可能认识的人“这个功能。。给你一个用户如何找到你好友的好友(三度)有谁?这种算法其实就是广度优先搜索
图的存储方式主要有邻接矩阵和邻接表两种存储方式。如果有不明白的可以先看下这篇文章图。
今天的代码实现都是基于邻接表存储的图。
先看下代码实现:
1.先实现一个邻接表存储的图。
/**
* 这是一个无向图
*/
public class Graph {
private int v;//顶点的个数
private LinkedList<Integer> adj[];//邻接表
public Graph(int v){
this.v=v;
adj = new LinkedList[v];
for(int i=0;i<v;i++){
adj[i]=new LinkedList<>();
}
}
public void addEdge(int s ,int t){
adj[s].add(t);
adj[t]