00001
00018 #include "BFS.h"
00019
00020 BFS::BFS(const Graph &g) : g(g), mark(g.getNumVertices(), -1),
00021 parents(g.getNumVertices(), 0), count(0)
00022 {
00023 startSearch();
00024 }
00025
00026 void BFS::startSearch()
00027 {
00028 for (int v = 0; v < g.getNumVertices(); v++)
00029 if (mark[v] == -1)
00030 search(Edge(v,v, 0));
00031 }
00032
00033
00034 void BFS::search(Edge e)
00035 {
00036
00037 queue<Edge> q;
00038
00039 map<int, int> m;
00040 map<int, int>::iterator iter;
00041
00042 q.push(e);
00043 while (!q.empty())
00044 {
00045
00046 e = q.front();
00047
00048
00049 q.pop();
00050
00051
00052 if (mark[e.w] == -1)
00053 {
00054 int v = e.v,
00055 w = e.w,
00056 weight = e.weight;
00057 mark[w] = count++;
00058 parents[w] = v;
00059
00060
00061 m = g.adjList[w];
00062 for (iter = m.begin(); iter != m.end(); iter++)
00063
00064
00065 if (mark[iter->first] == -1)
00066 q.push(Edge(w, iter->first, iter->second));
00067 }
00068 }
00069 }
00070