visitGraphBreadthFirst[graph_, start_, visitFunc_] :=
Module[{g = graph, neighbours, tmp},
neighbours = {start};
While[neighbours =!= {},
tmp = {};
Do[
If[PropertyValue[{g, n}, "Visited"] === True, Continue[]];
If[visitFunc[g, n] =!= True, tmp = {}; Break[]];
PropertyValue[{g, n}, "Visited"] = True;
tmp = {tmp, AdjacencyList[g, n]};
, {n, neighbours}];
neighbours = Flatten[tmp];
]
]