搜索算法——深度优先搜索与广度优先搜索

本文介绍了八数码问题的解决方案,重点探讨了两种搜索算法:深度优先搜索(C语言实现)和广度优先搜索(Java语言实现)。通过设置OPEN表和CLOSED表来管理搜索过程,解释了两种算法的工作原理及其在解决八数码问题中的应用。同时,提到了启发式搜索,包括A*算法在游戏自动寻路中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搜索算法

前言:

我重新理了以下思路,并用代码实现了一下八数码问题的解决.
主要用的算法为2个: [深度优先搜索] (c语言描述)和 [广度优先搜索](java语言描述) 。

其他的搜索算法暂时没搞。。 先挖个坑有空再来填。

OPEN表和CLOSED表

搜索算法中设置两个表:OPEN和CLOSED.
OPEN中记录所有已经生成的未考察的结点,CLOSED表中记录已访问过的结点.
在搜索算法中根据估价函数重排OPEN表,每次只考察OPEN表中最优的结点.

八数码问题`

在这里插入图片描述

从初始状态到目标状态,对于人来说还是很容易实现的.但是要交给计算机来执行,就要选择合适的算法.我们可以把每一次移动都当做是空格的移动.
以下就用几个算法来解决这个问题.

一、深度优先搜索 (c语言描述)

所谓深度优先搜索,就是在每次扩展一个结点时,选择到目前为止深度最深的结点优先扩展.(盲目搜索,不撞南墙不回头)
如图:
在这里插入图片描述
搜索结束,其他结点不再扩展.

	#include<stdio.h>
    int x = 2, y = 1; //x,y为空格坐标
    int bx=2,by=1;
    int min = 999; //最小步数
    int book[3][3]={
   
   0};//记录是否走过
    int curr[3][3] = {
   
    {
   
   2,8,3} ,
                       {
   
   1,6,4} ,
                       {
   
   7,0,5} };  //初始状态


int main(){
   
   
    void dfs(int x, int y, int step);
    book[x][y]=1;
    dfs(x,y,0);
    printf("最小步数=%d\n",min);
    return 0;
}

void dfs(int x, int y, int step){
   
   
    int next[4][2] = {
   
    {
   
   -1,0},//up
                       {
   
   1,0},//down
                       {
   
   0,-1},//left
                       {
   
   0,1} //right
                              };
    int tx,ty,k,temp;
    //判断是否达到目标状态
    if(curr[0][0]==1 && curr[0][1]==2 && curr[0][2]==3 && curr[1][0]==8 && curr[1][1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值