閑的無聊啊,重拾ACM啊…… 可是還用C/JAVA就沒意思啦。最近對Python挺感興趣,但是一直沒有機會使用一下,終於找到個支援Python的Online Judge——Zhejiang University Online Judge(ZOJ)(http://acm.zju.edu.cn),好吧,開始。
P1002,變形的八皇后問題,果斷深度搜尋。
1 import sys
2
3 class point:
4 x=0
5 y=0
6 def __init__(self,p,N):
7 self.x=p/N
8 self.y=p%N
9
10
11
12 maxN=0
13
14 def check(now,lst,p):
15 global lstAll
16
17 for t in lst:
18 if p.x==t.x:
19 res=False
20 rangeX=range(0,1)
21 if p.y<t.y:
22 rangeX=range(p.y,t.y)
23 else:
24 rangeX=range(t.y,p.y)
25
26 for py in rangeX:
27 if lstAll[p.x][py]=='X':
28 res=True
29 break
30 if res==False:
31 return False
32 elif p.y==t.y:
33 res=False
34 rangeX=range(0,1)
35 if p.x<t.x:
36 rangeX= range(p.x,t.x)
37 else:
38 rangeX= range(t.x,p.x)
39 for px in rangeX:
40 if lstAll[px][p.y]=='X':
41 res=True
42 break
43 if res==False:
44 return False
45 else:
46 continue
47 return True
48
49
50 def dg(N,now,lst):
51 global maxN
52 global lstAll
53
54 if now==0:
55 p=getNextPoint(None)
56 while p!=None:
57 lst.append(p)
58 dg(N,now+1,lst)
59 lst.remove(p)
60 p=getNextPoint(p)
61 else:
62 p=getNextPoint(lst[now-1])
63 while p!=None:
64 if check(now, lst,p):
65 lst.append(p)
66 dg(N,now+1,lst)
67 lst.remove(p)
68 p=getNextPoint(p)
69 if maxN<now:
70 maxN=now
71
72
73 def getNextPoint(nowPoint):
74 global N
75 global lstAll
76 if nowPoint==None:
77 p=-1
78 else:
79 p=nowPoint.x*N+nowPoint.y
80 while True:
81 p=p+1
82 np=point(p=p,N=N)
83 if np.y==N:
84 np.x=np.x+1
85 if np.x==N:
86 return None
87 if lstAll[np.x][np.y]!='X':
88 return np
89
90
91
92 #fileHandle = open ('g:/input.txt')
93 #N=int(fileHandle.readline())
94 N=int(raw_input())
95 while N!=0:
96 lstAll=[]
97 for i in range(0,N):
98 #strTemp=fileHandle.readline()
99 strTemp=raw_input()
100 lstT=[]
101 for j in range(0,N):
102 lstT.append(strTemp[j])
103 lstAll.append(lstT)
104
105 dg(N,0,[])
106 print maxN;
107 maxN=0
108 #N=int(fileHandle.readline())
109 N=int(raw_input())
110 #fileHandle.close()
第一次用Python寫這麼長的程式啊,很多Python的特殊文法都是現查現用的,不用說,很不優美,日後一定會有改進的~