So here is my program:
#!/usr/local/bin/python #Scott Landau #CS 380 #Assignment 1 Programming Portion in Python #Created - 4/6/09 #Last Edited - 4/22/09 import pdb #n is going to be equal to 4 for this queens problem. n = 4 #Assigning the empty list to initialState. initialState =  #Making an allDirections list. allDirections = [[-1,0],[1,0],[0,-1],[0,1],[-1,-1],[-1,1],[1,-1],[1,1]] #declare the list 'state' which represents the number of non threatening #queens that have been placed on the board. state =  def goal(state): if ((len(state)) == n): return True else: return False #defining allRules list which the contents of which will be created in next function. allRules =  #defining all the rules for an nxn board. assigning these rules to allRules def makeRules(n): for i in range(0, (n), 1): for j in range(0, (n), 1): allRules.append([i,j]) return #this function will apply the rule that is in the rule list to the given state, which just appends it to the state list. def applyRule(rule,state): state.append(rule) return #returns true if the row or column of 'pos' is out of bounds. def outOfBounds(pos): if ((pos < 0) or (pos > (n-1)) or (pos < 0) or (pos > (n-1))): return True else: return False #function that will determine which positions queens cannot be placed into because they might eventually run into another queen already on the board. def blocked(pos,state,direction): newpos = [(pos+direction),(pos+direction)] if newpos in state: return True elif outOfBounds(newpos): return False else: return True blocked(newpos,state,direction) #precondition to the actions checker def precondition(rule,state): for k in range(0, 8): if blocked(rule,state,(allDirections[k])): return False return True #generating a list of candidate rules def candidateRules(state): temp =  temp = allRules for l in range(0,(len(state)),1): number = temp.count(state[l]) for m in range(1,number,1): temp.remove(state[l]) return temp #applicable rules. use candidate and then precondition def applicableRules(state): newRules = candidateRules(state) for n in range(0,(len(newRules)),1): if not precondition(newRules[n],state): newRules.remove(newRules[n]) return newRules #make a rule look "pretty" def printRule(rule): print "Place a queen in " + str(rule) return #same for a state def printState(state): hboard = "+---" vboard = "| " for a in range(0,n,1): print hboard + hboard + hboard + hboard print vboard + vboard + vboard + vboard print hboard + hboard + hboard + hboard return #backTrack algorithm def backTrack(state): firstState = state new = state[1:] number = new.count(firstState) if (number > 0): return "FAILED 1" if (goal(firstState)): return "GOAL" if ((len(state)) > depthBound): return "FAILED 3" ruleSet = applicableRules(firstState) if (ruleSet == ): return "FAILED 4" for r in range(0,(len(ruleSet)),1): newState = applyRule((ruleSet[r]),firstState) newStateList = state.insert(newState, 1) path = backTrack(newStateList) if (path): return path.append(ruleSet[r]) return "FAILED 5" #test printState(state)
My state is in the form [[1,1],[2,0]] etc. This is just an example, because this cannot be a valid state according to the problem.
I had to make a visual representation of a chessboard. I did that with printState(state). The problem is, right now it's just printing the chessboard, and I'm confused on how, after passing state, it can actually place a 'Q' in one of the blank spots. Maybe I did this a bad way?
Can anyone help?
Also, I asked my teacher for help on these other two things but, if anyone knows why my candidateRules(state) is printing all the rules all the time, or see any other issues with this, I would appreciate it.
I AM NOT ASKING FOR YOU GUYS TO DO THIS ASSIGNMENT. I seemed to have had someone think that I was doing that the last time I posted a question, but I came with code and have tried my hardest before coming here. There is no point to come here without trying, I'm just trying to get some extra help.