ZOJ Problem Set – 1002 Fire Net (Python)

來源:互聯網
上載者:User

閑的無聊啊,重拾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的特殊文法都是現查現用的,不用說,很不優美,日後一定會有改進的~ 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.