广度优先搜索是图的一种算法,一是可以确定有没有到达的路径,而是如果有那么这个路径就是最短路径。就像水波那样,先从原点向周围一圈一圈的搜索(假设一圈有好多数据),没有才向更外圈搜索。
class Vertex {
public string data;
public bool isVisited;
public Vertex(string d) {
data = d;
isVisited = false;
}
}
class Program
{
static Dictionary<string, Vertex[]> dict = new Dictionary<string, Vertex[]>();
static void Main(string[] args)
{
Vertex A = new Vertex("Bom");
Vertex B = new Vertex("Tom");
Vertex C = new Vertex("Chicai");
Vertex D = new Vertex("Marry");
//构建关系图,谁是谁的好友
//I是原点,AB为第一圈,D为第二圈,C为第三圈
dict.Add("I", new Vertex[] { A, B });
dict.Add("Bom", new Vertex[] { D });
dict.Add("Tom", new Vertex[] { D });
dict.Add("Marry", new Vertex[] { A,B,C });
dict.Add("Chicai", new Vertex[] { D });
Search("Chicai");
Console.ReadKey();
}
static void Search(string name) {
Queue<Vertex> queue = new Queue<Vertex>();
Vertex[] datas;
dict.TryGetValue("I", out datas);
foreach (Vertex x in datas) {
queue.Enqueue(x);
}
while (queue.Count > 0) {
Vertex x = queue.Dequeue();
if (x.isVisited) {
continue;
}
x.isVisited = true;
if (x.data == name)
{
Console.WriteLine("找到了:" + name);
return;
}
else {
Console.WriteLine(x.data);
Vertex[] vertex;
dict.TryGetValue(x.data, out vertex);
foreach (Vertex v in vertex) {
queue.Enqueue(v);
}
}
}
Console.WriteLine("找不到啊");
}
}这里是一个找好友的游戏,通过好友来找好友,例如找一个叫Chicai的好友,首先从我自己这里找AB(Bom,Tom)都不是,那么就将他们的好友也加进队列中进行查找,这时候就有了D(Marry),发现D也不是,那么将Marry的好友也加进队列,这时候才有了C(Chicai),这时候就找到了。如果好友关系网中都没有这个人(那就是队列为空了)。