python深搜&回朔
好久没有做题了,以前都是用C++做ACM题目,但是自从发现python,发现python写算法更优雅。
所以以后决定一有时间就坚决要来做做题。因为ZOJ的OJ支持python语言的,所以决定选择ZOJ了。
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2
这道题目比较简单,这里就不做解释了,直接贴源码了!
def init():for i in range(0,int(n)):row = []x = raw_input()for i in range(0,len(x)):if x[i] == 'X':row.append(2)else:row.append(0)map.append(row);DFS()def find(x,y):for i in range(y,-1,-1):if(map[x][i] == 1):return 0if(map[x][i] == 2):breakfor i in range(y,int(n)):if(map[x][i] == 1):return 0if(map[x][i] == 2):breakfor i in range(x,-1,-1):if(map[i][y] == 1):return 0if(map[i][y] == 2):break;for i in range(x,int(n)):if(map[i][y] == 1):return 0if(map[i][y] == 2):breakreturn 1def DFS():global countglobal numberif(count >= number):number = countfor i in range(0,int(n)):for j in range(0,int(n)):if((not map[i][j]) and find(i,j)):map[i][j] = 1count = count + 1#print countDFS()map[i][j] = 0count = count - 1return countmap = []count = 0number = 0n = 0if __name__ == "__main__":while(1):count = 0number = 0map = []n = raw_input()if(int(n) == 0):breakelse:init()print number