当前位置:   article > 正文

头歌人工智能原理_def playmazz(mazz, start, end): ''' 走迷宫,从start走到en

def playmazz(mazz, start, end): ''' 走迷宫,从start走到end :param mazz: 图 :p

盲目搜索 

 

 

  1. def PlayMazz(mazz, start, end):
  2. '''
  3. 走迷宫,从start走到end
  4. :param mazz: 图
  5. :param start: 图的起点
  6. :param end: 图的出口
  7. '''
  8. # queue为队列,当队列为空或者当前地点为终点时搜索结束
  9. queue =list()
  10. closed=set()
  11. queue.append(start)
  12. #********* Begin *********#
  13. while(queue!=0):
  14. closed.add(queue[0])
  15. if queue[0]==end:
  16. print(end,end='')
  17. break
  18. else:
  19. print(queue[0],end='')
  20. for i in mazz[queue[0]]:
  21. if i in closed:
  22. pass
  23. else:
  24. queue.append( i )
  25. queue.remove(queue[0])
  26. #********* End *********#

启发式搜索 - 扫地机器人最短路径搜索

 

 

  1. from a_star_utils import Node
  2. def A_star(map, mapSize, start, end):
  3. '''
  4. A*算法,从start走到end
  5. :param map:地图
  6. :param mapSize:地图大小,例如[10,10]表示地图长10宽10
  7. :param start:表示出发地,类型为列表,如[1,2]表示出发地为地图中的第1行第2列的方块
  8. :param end:表示目的地,类型为列表,如[1,2]表示目的地为地图中的第1行第2列的方块
  9. :return:从出发地到目的地的路径
  10. '''
  11. openedList = []
  12. #********* Begin *********#
  13. # 获得出发地方块的信息,并将信息保存为node变量
  14. node = map[start[0]][start[1]]
  15. #********* End *********#
  16. node.distanceFromOri = 0
  17. node.allDistance = 0
  18. #********* Begin *********#
  19. # 将当前方块存到开启列表中
  20. openedList.append (node)
  21. node.added = True
  22. #********* End *********#
  23. while len(openedList) != 0:
  24. node = openedList.pop(0)
  25. node.closed = True
  26. if node.y == end[0] and node.x == end[1]:
  27. finalListNeedReverse = []
  28. while node != None:
  29. finalListNeedReverse.append(node)
  30. node = node.parent
  31. finalListNeedReverse.reverse()
  32. return finalListNeedReverse
  33. neighboursList = []
  34. y = node.y
  35. x = node.x
  36. parentDistanceFromOri = node.distanceFromOri
  37. for needNodey in (y + 1, y, y - 1):
  38. if needNodey < 0 or needNodey >= mapSize[0]:
  39. continue
  40. for needNodex in (x + 1, x, x - 1):
  41. if needNodex < 0 or needNodex >= mapSize[1]:
  42. continue
  43. needNode = map[needNodey][needNodex]
  44. if needNode.unable == True or needNode.closed == True or needNode.added == True:
  45. continue
  46. yOffset = needNodey - y
  47. xOffset = needNodex - x
  48. allOffset = yOffset + xOffset
  49. if allOffset == 1 or allOffset == -1:
  50. distanceFromOri = parentDistanceFromOri + 1
  51. else:
  52. distanceFromOri = parentDistanceFromOri + 1.4
  53. if needNode in neighboursList:
  54. # 若新的G值比老的G值低,则更新成老的G值
  55. if distanceFromOri < needNode.distanceFromOri:
  56. needNode.distanceFromOri = distanceFromOri
  57. else:
  58. needNode.distanceFromOri = distanceFromOri
  59. neighboursList.append(needNode)
  60. for needNode in neighboursList:
  61. needNode.parent = node
  62. # 更新F值
  63. needNode.allDistance = needNode.distanceFromOri + needNode.distanceFromDes
  64. needNode.added = True
  65. openedList.append(needNode)
  66. openedList.sort(key=lambda x: x.allDistance)
  67. return None

 搜索算法应用 - 四皇后问题

 

 

 

  1. def make(mark):
  2. '''
  3. 标记皇后的位置,例如mark[0] = 2, 表示第1行皇后放在第3列的位置
  4. :param mark: 皇后的位置信息
  5. :return: 拼接好的结果
  6. '''
  7. #初始化数组
  8. r = [['X' for _ in range(len(mark))] for _ in range(len(mark))]
  9. #将每一行中皇后的位置用‘Q’代替
  10. for i in mark:
  11. r[i][mark[i]] = 'Q'
  12. #枚举,将原来散的元素连接成字符串
  13. for k, v in enumerate(r):
  14. r[k] = ''.join(v)
  15. return r
  16. def FourQueens(mark, cur, ret):
  17. '''
  18. 深度优先搜索的方式求解四皇后问题
  19. :param mark:表示皇后的位置信息,例如[0,1,3,2]表示棋盘的第1行第1列,第2行第2列,第3行第4列,第4行第3列放置了皇后。例如[1, None, None, None]表示第1行第2列放置了皇后,其他行没有放置皇后。初始值为[None,None,None,None]
  20. :param cur:表示当前准备在第几行放置皇后,例如`cur=1`时,表示准备在第`2`行放置皇后。初始值为0
  21. :param ret:表示存放皇后摆放结果的列表,类型为列表。初始值为[]
  22. :return:无
  23. '''
  24. if cur == len(mark):
  25. #********* Begin *********#
  26. # 如果当前行是最后一行,记录一个解,并返回结束此次搜索
  27. ret.append(make(mark))
  28. return
  29. #********* End *********#
  30. #试探处理,将当前行的皇后应该在的位置遍历每一列,如果满足条件,递归调用处理下一行
  31. for i in range(len(mark)):
  32. mark[cur], down = i, True
  33. for j in range(cur):
  34. # 当想在当前位置放皇后会与其他皇后冲突时不放置皇后
  35. if mark[j] == i or abs(i-mark[j]) == cur - j:
  36. down = False
  37. break
  38. if down:
  39. # 准备在下一行找能放置换后的位置
  40. FourQueens(mark, cur+1, ret)

 产生式系统

 

 

 

  1. # 动物识别系统
  2. # 自定义函数,判断有无重复元素
  3. def judge_repeat(value, list=[]):
  4. for i in range(0, len(list)):
  5. if (list[i] == value):
  6. return 1
  7. else:
  8. if (i != len(list) - 1):
  9. continue
  10. else:
  11. return 0
  12. # 自定义函数,对已经整理好的综合数据库real_list进行最终的结果判断
  13. def judge_last(list):
  14. for i in list:
  15. if (i == '23'):
  16. for i in list:
  17. if (i == '12'):
  18. for i in list:
  19. if (i == '21'):
  20. for i in list:
  21. if (i == '13'):
  22. print("黄褐色,有斑点,哺乳类,食肉类->金钱豹\n")
  23. print("所识别的动物为金钱豹")
  24. return 0
  25. elif (i == '14'):
  26. print("黄褐色,有黑色条纹,哺乳类,食肉类->虎\n")
  27. print("所识别的动物为虎")
  28. return 0
  29. elif (i == '14'):
  30. for i in list:
  31. if (i == '24'):
  32. print("有黑色条纹,蹄类->斑马\n")
  33. print("所识别的动物为斑马")
  34. return 0
  35. elif (i == '24'):
  36. for i in list:
  37. if (i == '13'):
  38. for i in list:
  39. if (i == '15'):
  40. for i in list:
  41. if (i == '16'):
  42. print("有斑点,有黑色条纹,长脖,蹄类->长颈鹿\n")
  43. print("所识别的动物为长颈鹿")
  44. return 0
  45. elif (i == '20'):
  46. for i in list:
  47. if (i == '22'):
  48. print("善飞,鸟类->信天翁\n")
  49. print("所识别的动物为信天翁")
  50. return 0
  51. #********* Begin *********#
  52. elif(i == '22'):
  53. for i in list:
  54. if(i == '4'):
  55. for i in list:
  56. if(i == '15'):
  57. for i in list:
  58. if(i == '16'):
  59. print("不会飞,长脖,长腿,鸟类->鸵鸟\n")
  60. print('所识别的动物为鸵鸟')
  61. return 0
  62. # ********* End *********#
  63. elif (i == '4'):
  64. for i in list:
  65. if (i == '22'):
  66. for i in list:
  67. if (i == '18'):
  68. for i in list:
  69. if (i == '19'):
  70. print("不会飞,会游泳,黑白二色,鸟类->企鹅\n")
  71. print("所识别的动物企鹅")
  72. return 0
  73. else:
  74. if (list.index(i) != len(list) - 1):
  75. continue
  76. else:
  77. print("\n根据所给条件无法判断为何种动物")

 框架表示法

 

  1. #encoding=utf8
  2. def d():
  3. #********* Begin *********#
  4. d = {'name':'蔡徐坤','age':'21','hobby':'rap','sex':'male'}
  5. #********* End *********#
  6. return d

逻辑表示法

 

 

  1. #encoding=utf8
  2. '''
  3. 请将下面代码空缺部分补全
  4. '''
  5. def x(p):
  6. #********* Begin *********#
  7. if p == '打雷':
  8. q = '下雨'
  9. elif p == '动物会飞会下蛋':
  10. q = '该动物是鸟'
  11. #********* End *********#
  12. print(q)

归结反演

 

  1. S = [] # 以列表形式存储子句集S
  2. """ 读取子句集文件中子句,并存放在S列表中 - 每个子句也是以列表形式存储 - 以析取式分割 - 例如:~p ∨ ~q ∨ r 存储形式为 ['~p', '~q', 'r'] """
  3. def readClauseSet(filePath):
  4. global S
  5. for line in open(filePath, mode='r', encoding='utf-8'):
  6. line = line.replace(' ', '').strip()
  7. line = line.split('∨')
  8. S.append(line)
  9. """ - 为正文字,则返回其负文字 - 为负文字,则返回其正文字 """
  10. def opposite(clause):
  11. if '~' in clause:
  12. return clause.replace('~', '')
  13. else:
  14. return '~' + clause
  15. """ 归结 """
  16. def resolution():
  17. global S
  18. end = False
  19. while True:
  20. if end: break
  21. father = S.pop()
  22. for i in father[:]:
  23. if end: break
  24. for mother in S[:]:
  25. if end: break
  26. j = list(filter(lambda x: x == opposite(i), mother))
  27. if j == []:
  28. continue
  29. else:
  30. print('\n亲本子句:' + ' ∨ '.join(father) + ' 和 ' + ' ∨ '.join(mother))
  31. father.remove(i)
  32. mother.remove(j[0])
  33. #********** Begin **********#
  34. if father == [] and mother == []:
  35. print('归结式:NIL')
  36. end = True
  37. elif father == []:
  38. print('归结式:' + ' ∨ '.join(mother))
  39. elif mother == []:
  40. print('归结式:' + ' ∨ '.join(father))
  41. else:
  42. print('归结式:' + ' ∨ '.join(father) + ' ∨ ' + ' ∨ '.join(mother))
  43. #********** End **********#

模糊推理及其应用

 

  1. def ruleMD(stain):
  2. if stain < 0 or stain > 100:
  3. return 0.0
  4. else: # 当传入的参数在0-100之间时,该处有两种情况
  5. # 计算MD的结果,并且和同参数下的SD结果相比较,得出一个结果
  6. if stain >= 0 and stain <= 50:
  7. return stain / 50.0
  8. else:
  9. # 同上的操作,得出结果和同参数下的LD相比较
  10. return (100 - stain) / 50.0
  11. def ruleSD(stain):
  12. # SD部分的rule
  13. # 当输入的参数0 <= x <= 50, 执行该方法
  14. result = (50 - stain) / 50.0
  15. returnMDresult = ruleMD(stain)
  16. # 传参数到MD中,计算,并比较
  17. # 1、相同,则返回结果为SD2SD的结果大,则返回SD3、MD的结果大,则返回MD的返回值
  18. if result < returnMDresult:
  19. return 2.0
  20. else:
  21. return 1.0
  22. def ruleLD(stain):
  23. # LD部分的rule
  24. # 当输入的参数在50 - 100之间时,执行
  25. result = (stain - 50) / 50
  26. returnMDresult = ruleMD(stain)
  27. # 同时将参数传入给MD,同时比较MD方法传回来的参数和该方法求出的值相比较,求出最后的最适合的预测值
  28. # ********** Begin **********#
  29. if result < returnMDresult:
  30. return 2.0
  31. else:
  32. return 3.0
  33. # ********** End **********#
  34. def ruleMG(oil):
  35. # 当传入的参数在0 - 100之间时,该处有两种情况
  36. if oil < 0 or oil > 100:
  37. return 0 # 当在论域之外时,直接返回无结果
  38. else:
  39. if oil >= 0 and oil <= 50:
  40. return oil / 50.0 # 计算MD的结果,并且和同参数下的SD结果相比较,得出一个结果
  41. else:
  42. return (100 - oil) / 50 # 同上的操作,得出结果和同参数下的LD相比较
  43. def ruleSG(oil):
  44. if oil < 0 or oil > 50:
  45. return 0.0
  46. else:
  47. # SG部分的rule
  48. # 当输入的参数0<=x<=50,执行该方法
  49. result = (50 - oil) / 50.0
  50. returnMGresult = ruleMG(oil)
  51. # 传参数到MD中,计算,并比较
  52. # 1、相同,则返回结果为SD2SD的结果大,则返回SD3、MD的结果大,则返回MD的返回值
  53. if result < returnMGresult:
  54. return 2.0
  55. else:
  56. return 1.0
  57. def ruleLG(oil):
  58. # LD部分的rula
  59. # 当输入的参数在50 - 100之间时,执行
  60. # 同时将参数传入给MG,同时比较MG方法传回来的参数和该方法求出的值相比较,求出最后的最适合的预测值
  61. returnMGresult = ruleMG(oil)
  62. result = (oil - 50) / 50.0
  63. # 比较后,得到预测值
  64. if result < returnMGresult:
  65. return 2.0
  66. else:
  67. return 3.0
  68. # F函数,总的函数,从该函数中分流到rule的三个函数中
  69. def Function(oil, stain):
  70. # VS: SD, SG
  71. # S: MD, SG
  72. # M: SD, MG MD, MG LD, SG
  73. # L: SD, LG MD,LG LD,MG
  74. # XL: LD, LG
  75. # 根据规则输出最后的洗涤时间
  76. # 需要客户的正确输入
  77. # ********** Begin **********#
  78. if stain >= 0 and stain <= 50:
  79. result_D = ruleSD(stain)
  80. else:
  81. result_D = ruleLD(stain)
  82. if oil >= 0 and oil <= 50:
  83. result_G = ruleSG(oil)
  84. else:
  85. result_G = ruleLG(oil)
  86. # ********** End **********#
  87. # 比较最后的结果,返回结果控制规则表,例如VS在表格中的坐标是(1,1),S的坐标是(2,1
  88. if result_D == 1.0 and result_G == 1.0:
  89. return 1 # return VS
  90. elif result_G == 1.0 and result_D == 2.0:
  91. return 2 # return S
  92. elif (result_D == 1.0 and result_G == 2.0) or (result_G == 2.0 and result_D == 2.0) or (
  93. result_G == 1.0 and result_D == 3.0):
  94. return 3 # reutrn M
  95. elif (result_D == 1.0 and result_G == 3.0) or (result_D == 2.0 and result_G == 3.0) or (
  96. result_D == 3.0 and result_G == 2.0):
  97. return 4 # return L
  98. elif result_G == 3.0 and result_D == 3.0:
  99. return 5 # return VL

A*搜索算法

 

  1. class Array2D:
  2. """
  3. 说明:
  4. 1.构造方法需要两个参数,即二维数组的宽和高
  5. 2.成员变量w和h是二维数组的宽和高
  6. 3.使用:‘对象[x][y]’可以直接取到相应的值
  7. 4.数组的默认值都是0
  8. """
  9. def __init__(self, w, h):
  10. self.w = w
  11. self.h = h
  12. self.data = []
  13. self.data = [[0 for y in range(h)] for x in range(w)]
  14. def showArray2D(self):
  15. for y in range(self.h):
  16. for x in range(self.w):
  17. print(self.data[x][y], end=' ')
  18. print("")
  19. def __getitem__(self, item):
  20. return self.data[item]
  21. class Point:
  22. """
  23. 表示一个点
  24. """
  25. def __init__(self, x, y):
  26. self.x = x
  27. self.y = y
  28. def __eq__(self, other):
  29. if self.x == other.x and self.y == other.y:
  30. return True
  31. return False
  32. def __str__(self):
  33. return "x:" + str(self.x) + ",y:" + str(self.y)
  34. class AStar:
  35. """
  36. AStar算法的Python3.x实现
  37. """
  38. class Node: # 描述AStar算法中的节点数据
  39. def __init__(self, point, endPoint, g=0):
  40. self.point = point # 自己的坐标
  41. self.father = None # 父节点
  42. self.endPoint = endPoint
  43. self.g = g # g值,g值在用到的时候会重新算
  44. self.h = (abs(endPoint.x - point.x) + abs(endPoint.y - point.y)) * 10 # 计算h值
  45. def __init__(self, map2d, startPoint, endPoint, passTag=0):
  46. """
  47. 构造AStar算法的启动条件
  48. :param map2d: Array2D类型的寻路数组
  49. :param startPoint: Point或二元组类型的寻路起点
  50. :param endPoint: Point或二元组类型的寻路终点
  51. :param passTag: int类型的可行走标记(若地图数据!=passTag即为障碍)
  52. """
  53. # 开启表
  54. self.openList = []
  55. # 关闭表
  56. self.closeList = []
  57. # 寻路地图
  58. self.map2d = map2d
  59. # 起点终点
  60. # ********** Begin **********#
  61. self.startPoint = startPoint
  62. self.endPoint = endPoint
  63. # ********** End **********#
  64. # 可行走标记
  65. self.passTag = passTag
  66. def getMinNode(self):
  67. """
  68. 获得openlist中F值最小的节点
  69. :return: Node
  70. """
  71. # ********** Begin **********#
  72. nowf = self.openList[0]
  73. minf=self.openList[0].g +self.openList[0].h
  74. for i in self.openList:
  75. if minf > i.g + i.h:
  76. minf = i.g + i.h
  77. nowf = i
  78. return nowf
  79. # ********** End **********#
  80. def pointInCloseList(self, point):
  81. for node in self.closeList:
  82. if node.point == point:
  83. return True
  84. return False
  85. def pointInOpenList(self, point):
  86. for node in self.openList:
  87. if node.point == point:
  88. return node
  89. return None
  90. def endPointInCloseList(self):
  91. for node in self.openList:
  92. if node.point == self.endPoint:
  93. return node
  94. return None
  95. def searchNear(self, minF, offsetX, offsetY):
  96. """
  97. 搜索节点周围的点
  98. :param minF:F值最小的节点
  99. :param offsetX:坐标偏移量
  100. :param offsetY:
  101. :return:
  102. """
  103. # 越界检测
  104. # ********** Begin **********#
  105. if minF.point.x + offsetX >= self.map2d.w or minF.point.y + offsetY >= self.map2d.h or minF.point.x + offsetX < 0 or minF.point.y + offsetY < 0:
  106. return
  107. # ********** End **********#
  108. # 如果是障碍,就忽略
  109. if self.map2d[minF.point.x + offsetX][minF.point.y + offsetY] != self.passTag:
  110. return
  111. # 如果在关闭表中,就忽略
  112. currentPoint = Point(minF.point.x + offsetX, minF.point.y + offsetY)
  113. currentNode = AStar.Node(currentPoint,self.endPoint)
  114. if self.pointInCloseList(currentPoint):
  115. return
  116. # 设置单位花费
  117. if offsetX == 0 or offsetY == 0:
  118. step = 10
  119. else:
  120. step = 14
  121. # 如果不再openList中,就把它加入openlist
  122. # ********** Begin **********#
  123. if not self.pointInOpenList(currentPoint):
  124. # print(currentNode.g)
  125. currentNode.g = step + minF.g
  126. # print(currentNode)
  127. currentNode.father = minF
  128. self.openList.append(currentNode)
  129. # ********** End **********#
  130. # 如果在openList中,判断minF到当前点的G是否更小
  131. if minF.g + step < currentNode.g: # 如果更小,就重新计算g值,并且改变father
  132. currentNode.g = minF.g + step
  133. currentNode.father = minF
  134. def start(self):
  135. """
  136. 开始寻路
  137. :return: None或Point列表(路径)
  138. """
  139. # 判断寻路终点是否是障碍
  140. if self.map2d[self.endPoint.x][self.endPoint.y] != self.passTag:
  141. return None
  142. # 1.将起点放入开启列表
  143. startNode = AStar.Node(self.startPoint, self.endPoint)
  144. self.openList.append(startNode)
  145. # 2.主循环逻辑
  146. while True:
  147. # 找到F值最小的点
  148. minF = self.getMinNode()
  149. # 把这个点加入closeList中,并且在openList中删除它
  150. self.closeList.append(minF)
  151. self.openList.remove(minF)
  152. # 判断这个节点的上下左右节点
  153. # ********** Begin **********#
  154. self.searchNear(minF,0,-1)
  155. self.searchNear(minF,1,0)
  156. self.searchNear(minF,-1,0)
  157. self.searchNear(minF,0,1)
  158. # ********** End **********#
  159. # 判断是否终止
  160. point = self.endPointInCloseList()
  161. if point: # 如果终点在关闭表中,就返回结果
  162. # print("关闭表中")
  163. cPoint = point
  164. pathList = []
  165. while True:
  166. if cPoint.father:
  167. pathList.append(cPoint.point)
  168. cPoint = cPoint.father
  169. else:
  170. return list(reversed(pathList))
  171. if len(self.openList) == 0:
  172. return None

盲目搜索之宽度优先搜索算法

 

  1. # -*- coding:utf-8 -*-
  2. class Maze:
  3. def __init__(self, map, n, m, x, y):
  4. self.ans = 0 #最短步长结果
  5. self.map = map #迷宫地图map[0,n-1][0,m-1](下标0开始)
  6. self.n = n #迷宫地图行数n
  7. self.m = m #迷宫地图列数m
  8. self.x = x #起点,行坐标(下标0开始)
  9. self.y = y #起点,列坐标(下标0开始)
  10. class Solution:
  11. def solveMaze(self, maze):
  12. """求解迷宫问题
  13. :type: maze: class Maze #迷宫的数据结构类
  14. :rtype: maze.ans: int #返回最短路径长度
  15. """
  16. #请在这里补充代码,完成本关任务
  17. #********** Begin **********#
  18. maze.ans = 0
  19. que = [(maze.x, maze.y, maze.ans)] #宽度搜索——队列(列表类型)
  20. vis = {(maze.x, maze.y):True} #访问标记——字典类型
  21. dir = [[0, -1], [0, 1], [-1, 0], [1, 0]] #移动方向控制
  22. while que.__len__()>0:
  23. node = que[0] #出队
  24. del que[0]
  25. x = node[0]
  26. y = node[1]
  27. ans = node[2]
  28. if x==0 or x==maze.n-1 or y==0 or y==maze.m-1: #边界,出迷宫,更新结果
  29. if maze.ans==0 or maze.ans>ans:
  30. maze.ans = ans
  31. for i in range(4): #上下左右移动
  32. newx = x + dir[i][0] #新的行坐标
  33. newy = y + dir[i][1] #新的列坐标
  34. if 0<=newx and newx<maze.n and 0<=newy and newy<maze.m \
  35. and maze.map[newx][newy]==1 and (newx, newy) not in vis:
  36. vis[(newx, newy)] = True
  37. que.append((newx, newy, ans+1)) #入队
  38. return maze.ans #返回结果
  39. #********** End **********#

盲目搜索之深度优先搜索算法

 

  1. # -*- coding:utf-8 -*-
  2. class Solution:
  3. def __init__(self, n=0):
  4. self.vis = [[]] #用于标记是否存在皇后的二维列表(初始值全为0
  5. self.ans = 0 #用于存储答案(N皇后方案数,初始值0
  6. self.n = n #用于存储皇后数量n
  7. def solveNQueens(self):
  8. """求解N皇后问题(调用self.DFS函数)
  9. :rtype: self.ans: int #返回N皇后放置方案数
  10. """
  11. #请在这里补充代码,完成本关任务
  12. #********** Begin **********#
  13. self.vis = [[0 for j in range(50)] for i in range(3)]
  14. self.ans = 0
  15. self.DFS(1, self.n)
  16. return self.ans
  17. #********** End **********#
  18. def DFS(self, row, n):
  19. """深度优先搜索N皇后问题的解空间
  20. :type: row: int #NxN棋盘的第row行
  21. :type: n: int #皇后数量n
  22. :rtype: None #无返回值
  23. """
  24. #请在这里补充代码,完成本关任务
  25. #********** Begin **********#
  26. if row == n+1:
  27. self.ans += 1
  28. return
  29. for i in range(1,n+1,1):
  30. if self.vis[0][row-i+n]==0 and self.vis[1][i]==0 and self.vis[2][row+i]==0 :
  31. self.vis[0][row-i+n] = self.vis[1][i] = self.vis[2][row+i] = 1
  32. self.DFS(row+1, n)
  33. self.vis[0][row-i+n] = self.vis[1][i] = self.vis[2][row+i] = 0
  34. #********** End **********#

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/738839
推荐阅读
相关标签
  

闽ICP备14008679号