盲目搜索算法-人工智能

本文探讨了人工智能中两种重要的盲目搜索算法——广度优先搜索和深度优先搜索,并介绍了它们在实际问题中的应用。
摘要由CSDN通过智能技术生成

第1关:广度优先搜索

#函数部分
def PlayMazz(mazz, start, end):
    '''
    走迷宫,从start走到end
    :param mazz: 图
    :param start: 图的起点
    :param end: 图的出口
    '''
    # queue为队列,当队列为空或者当前地点为H时搜索结束
    visited, queue = set(), [start]
    #********* Begin *********#
    while queue:
        # 从队列中出队,即当前所处的地点
        vertex = queue.pop(0)
        if vertex not in visited:
            visited.add(vertex)
            print(vertex, end='')
            #当走到出口时结束算法
            if vertex == end:
                return
            # 将当前所处地点所能走到的地点放入队列
            for v in mazz[vertex]:
                if v not in visited:
                    queue.extend(v)
    #********* End *********#

第2关:深度优先搜索

#dfs搜索
def PlayMazz(graph, start,end, visited=None):
    '''
    深度优先搜索,从1走到9
    :param graph: 搜索的空间
    :param start: 开始搜索的起点
    :param visited:  已经搜索过的点集合
    '''
    if visited is None:
        visited = set()
    visited.add(start)
    print(start, end='')
    # 当前地点为终点时结束搜索
    if start == end:
        return
    #********* Begin *********#
    # 看看当前位置有哪些路可以走,如果能走并且之前没有走过就走
    for v in graph[start]:
        if v not in visited:
            PlayMazz(graph, v, end,visited)
    #********* End *********#

第3关:盲目搜索算法的应用

#算法文件(student.py)
# -*- coding:utf-8 -*-
class Solution:
    def __init__(self, n=0):
        self.vis = [[]]             #用于标记是否存在皇后的二维列表(初始值全为0)
        self.ans = 0                #用于存储答案(N皇后方案数,初始值0)
        self.n = n                  #用于存储皇后数量n
    def solveNQueens(self):
        """求解N皇后问题(调用self.DFS函数)
        :rtype: self.ans: int    #返回N皇后放置方案数
        """
        #请在这里补充代码,完成本关任务
        #********** Begin **********#
        self.vis = [[0 for j in range(50)] for i in range(3)]
        self.ans = 0
        self.DFS(1, self.n)
        return self.ans
        #********** End **********#
    def DFS(self, row, n):
        """深度优先搜索N皇后问题的解空间
        :type: row: int      #NxN棋盘的第row行
        :type: n: int        #皇后数量n
        :rtype: None         #无返回值
        """
        #请在这里补充代码,完成本关任务
        #********** Begin **********#
        if row == n+1:
            self.ans += 1
            return
        for i in range(1,n+1,1):
            if self.vis[0][row-i+n]==0 and self.vis[1][i]==0 and self.vis[2][row+i]==0 :
                self.vis[0][row-i+n] = self.vis[1][i] = self.vis[2][row+i] = 1
                self.DFS(row+1, n)
                self.vis[0][row-i+n] = self.vis[1][i] = self.vis[2][row+i] = 0
        #********** End **********#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小施没烦恼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值