POJ 1979 基础搜索 DFS\BFS 一

本文通过POJ1979题目的实例,详细对比了广度优先搜索(BFS)与深度优先搜索(DFS)两种算法的具体实现过程。从代码实现到运行逻辑,深入浅出地介绍了这两种常用图遍历算法的应用场景及特点。

  遥想各位大佬都在努力刷题学习,明明可以靠天赋,依然这么努力的拼搏。

  实在忍不住做起Vjudge,进一步发现自己的愚蠢.....快哭了

 

  首先来了一道手速题,POJ 1979    : http://poj.org/problem?id=1979

  题意: 一个矩阵,问起点出发,有几个可达位置数。 

  作为菜鸟,我先写了不熟练的BFS,然后再写了DFS。 交了就过了。 然而这么简单的题目我就写了2小时。做题实在太少,各种细节错误,字符打错什么的。  O__O "…抠脚

  写BFS的思路是:

   队列开始装入首点。  

  取点;判断是否踩过,踩过就过,否则计数标记并接下去;                                   (取出再踩,踩未踩的,踩了再拓展)不够清晰

  将周围的不越界的点都放入队列     ——(重复至空)

 

  写DFS的思路是:

                               判断此点有无越界,判断此点是否踩过                            (递归终止条件)

                               未踩过标记并就对此点各方向递归                                   (递归实现内容)

 

  很久没写了,写搜索非常艰难以及思维混乱

  BFS代码:

 

#include"cstdio"
#include"cstring"
#include"queue"
using namespace std;
#define loop(x,y,z) for(x=y;x<z;x++)

int n,m,ans;
char pos[21][21];
int book[21][21];
int change[4][2]={-1,0,1,0,0,1,0,-1};

int pan(int i,int j)
{
    if(i<0||i>=n||j<0||j>=m)return 0;
    if(pos[i][j]=='.'||pos[i][j]=='@')return 1;
    return 0;
}

struct node{
    int x,y;
    node(int i,int j)
    {
        x=i;
        y=j;
    }
};

void BFS(int beginx,int beginy)
{
    queue<node>q;
    q.push(node(beginx,beginy));
    while(!q.empty())
    {
        node t=q.front();
        q.pop();
        int x=t.x;
        int y=t.y;
        if(book[x][y])continue;
        book[x][y]=1;
        ans++;

        int i;
        loop(i,0,4)
        {
            int& _x=change[i][0];
            int& _y=change[i][1];
            if(!pan(x+_x,y+_y))continue;
            q.push(node(x+_x,y+_y));
        }
    }
}

int main()
{
    int i,j;
    int beginx,beginy;

    while(~scanf("%d%d",&m,&n))
    {
        if(m==0&&n==0)break;
        loop(i,0,n)
            scanf("%s",pos[i]);

        loop(i,0,n)
            loop(j,0,m)
            if(pos[i][j]=='@')
            {
                beginx=i;
                beginy=j;
                break;
            }
        memset(book,0,sizeof book);
        ans=0;
        BFS(beginx,beginy);
        printf("%d\n",ans);
    }
    return 0;

}

 

 

  DFS代码:

 

#include"cstdio"
#include"cstring"
#define loop(x,y,z) for(x=y;x<z;x++)

int n,m,ans;
char pos[21][21];
int book[21][21];
int change[4][2]={-1,0,1,0,0,1,0,-1};

int pan(int i,int j)
{
    if(i<0||i>=n||j<0||j>=m)return 0;
    if(pos[i][j]=='.'||pos[i][j]=='@')return 1;
    return 0;
}

void dfs(int i,int j)
{
    if(!pan(i,j))return;
    if(book[i][j])return;
    book[i][j]=1;
    ans++;
    int k;
    loop(k,0,4)
    {
        int &x=change[k][0];
        int &y=change[k][1];
        dfs(i+x,j+y);
    }
}

int main()
{
    int i,j;
    int beginx,beginy;

    while(~scanf("%d%d",&m,&n))
    {
        if(m==0&&n==0)break;
        loop(i,0,n)
            scanf("%s",pos[i]);

        loop(i,0,n)
            loop(j,0,m)
            if(pos[i][j]=='@')
            {
                beginx=i;
                beginy=j;
                break;
            }
        memset(book,0,sizeof book);
        ans=0;
        dfs(beginx,beginy);
        printf("%d\n",ans);
    }
    return 0;

}

 

 


 

 

 

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究改进中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值