Hello,

I've tried using BFS for this problem but am having trouble.
http://code.google.com/codejam/contest/186264/dashboard#s=p2

After I get one path for minimal solution, [from bfs] I need to fully
search for all solutions in the bfs, [by looking at number of steps]
but am not able to do it.

In the code, (shown below)  x is the minimal number of steps to reach
the i,j th position. Now I want to look till the x + 1th step - tried
to implement another bfs, but that runs very slow.


My code in Python - this basically does BFS, but need to go further
down and better (This will return one path ending at the i,j th
position, with minimal steps)

*************************************************************************
from collections import deque

class Square:
    def __init__ (self, x = 0, y = 0, s = 0, a = 0, b = None):
        self.X = x
        self.Y = y
        self.sum = s
        self.steps = a
        self.square = b

def SquareMath(i,j,a,target):  # l is the Square that we're looking
at, i,j are the positions
    a[0] = list(map(int,(a[0].split(' '))))
    l = a[1:]
    m = []
    q = deque()
    start = Square(i,j,int(l[i][j]),0)
    #Square is of type (x,y, sum,steps,square)
    q.append(start)
    sum1 = 0
    y = 0
    p = []
    c = False

    #Now its the standard BFS algorithm

    while len(q) != 0:
        top = q[0]
        q.popleft()

        for direction1 in [[1,0],[-1,0],[0,1],[0,-1]]:
            for direction2 in [[1,0],[-1,0],[0,1],[0,-1]]:
                i,j = direction1[0],direction1[1]
                u,v = direction2[0],direction2[1]
                new_X = top.X + i
                new_Y = top.Y + j
                if new_X <= len(l)-1 and new_X >= 0 and new_Y <=
len(l)-1 and new_Y >= 0:
                    t = Square(new_X,new_Y,top.sum,top.steps,top)

                    new2_X = new_X + u
                    new2_Y = new_Y + v
                    if new2_X <= len(l)-1 and new2_X >= 0 and new2_Y
<= len(l)-1 and new2_Y >= 0:
                        s = 0
                        if l[new_X][new_Y] == '+':
                            s = top.sum + int(l[new2_X][new2_Y])
                            q.append(Square(new2_X,new2_Y,s,top.steps
+ 1,t))
                            if top.sum == target:
                                return top.steps + 1
                        elif l[new_X][new_Y] == '-':
                            s = top.sum - int(l[new2_X][new2_Y])
                            q.append(Square(new2_X,new2_Y,s,top.steps
+ 1,t))
                            if top.sum == target:
                                return top.steps + 1

                        if top.sum == target: #and c == False:
                            x = top.steps + 1
                            path = []
                            t2 = top
                            path = path + [l[top.X][top.Y]]
                            while top.square != None:
                                t1 = top.square
                                path = path + [l[t1.X][t1.Y]]
                                top = top.square

                            s = ''.join([i for i in path])
                            p = p + [[s,x]]
                            return p


**********************************************************************

Any ideas/ suggestions?
Thanks alot :)



-- 
You received this message because you are subscribed to the Google Groups 
"Google Code Jam" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-code?hl=en.

Reply via email to