Neat Tricks:
when and what to use for vis
in the queue. you can store things like path lengths as well as the neigh-boring nodes
q.append((nextnode, pathlen))