zoukankan      html  css  js  c++  java
  • ZOJ Problem Set 1002 Fire Net (Python)

    闲的无聊啊,重拾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的特殊语法都是现查现用的,不用说,很不优美,日后一定会有改进的~ 

  • 相关阅读:
    数据结构(java语言描述)顺序栈的使用(两个大数相加)
    DB2 Sql性能查看与优化
    spring默认为单例模式
    Java map的匿名类的初始化
    使用nohup后台执行ftp传输命令
    停止一个java的线程执行
    静态类
    XML语法随记
    Crontab有关
    string转Date转回String(JAVA)
  • 原文地址:https://www.cnblogs.com/vistach/p/2185124.html
Copyright © 2011-2022 走看看