If your not using a priority queue (or a minimum search), it's not Dijkstra. In Python, a priority queue is easy to implement using the heapq module.

I took the liberty to simplify and modify your code to something that looks more like Dijkstra's algorithm. I didn't test it as I don't have access to your data structures, so there are very probably some bugs, but it should be a better starting point:

`from heapq import *`

def heatmap(self, source_x,source_y):

l_open = []

source = self.lookup(source_x,source_y)

if source: l_open.append((0,source,source)) # (value, cell, previous)

while l_open:

value, cell, previous = heappop(l_open)

if cell.visited: continue

cell.visited = True

cell.previous = previous

cell.value = value

for x,y in self.get_neighbor_addrs(cell.x,cell.y)

c = self.lookup(x,y)

if c and not (c.visited or c.blocked):

heappush(l_open, (value + 1, c, cell))

return self.render(0,self.width, 0,self.height,True)

As long as the cell cost is constant, Dijkstra and BFS are equivalent; Dijkstra becomes interesting when the cost is variable (but it should not be negative).