hdu 2128 BFS

HDU2128迷宫最短路径解析

这题太恶心了。。。。。不对。。。是我弱暴了。。。。。我一直以为炸了墙之后墙还有的来着。。。好吧我蛋疼了。。。。

AC代码如下:

// hdu 2128 mnlm 1.0  
#include<cstdio>  
#include<cstdlib>  
#include<cmath>  
#include<cstring> 
#include <cctype>
#include<vector>  
#include<algorithm>  
using namespace std;  
#include<queue>  
  
struct NODE  
{  
    int x;  
    int y;  
    int b;  
    int t;  
    int mb[8][8]; //保存每个位置的最小炸弹数  
};  
queue <NODE> q;  
int xy[4][2] =   
{  
    {0, 1},  
    {0, -1},  
    {1, 0},   
    {-1, 0}  
};  
int N;  
int M;  
int startx, starty;  //S的位置  
char map[10][10];  
int ans;             //最小的时间,初始值为-1  
void BFS()  
{  
    ans = -1;  
    while (!q.empty())  
    {  
        q.pop();  
    }  
    NODE m;  
    NODE tt;  
    m.x = startx;  
    m.y = starty;  
    m.b = 0;  
    m.t = 0;  
    memset(m.mb, -1, sizeof(m.mb));  
    m.mb[m.x][m.y] = 0;  
    q.push(m);  
    while (!q.empty())  
    {  
        m = q.front();  
        q.pop();  
        if (ans != -1 &&  
        m.t + 1 >= ans)  
        {  
            continue;  
        }  
        int i;   
        for (i = 0; i < 4; i++)  
        {  
            tt.x = m.x + xy[i][0];  
            tt.y = m.y + xy[i][1];  
            tt.b = -1;  
            if (tt.x >= 0 && tt.x < N &&   
            tt.y >= 0 && tt.y < M)  
            {  
                if (map[tt.x][tt.y] == 'D')  
                {  
                    if (ans == -1 ||  
                    m.t + 1 < ans)  
                    {  
                        ans = m.t + 1;  
                    }  
                    continue;  
                }  
                if (m.mb[tt.x][tt.y] > -1 ||  
                map[tt.x][tt.y] == '.') //已经走过的炸弹和WALL都没有了,相当于'.'  
                {  
                    tt.t = m.t + 1;  
                    tt.b = m.b;  
                }  
                else if (map[tt.x][tt.y] == 'X' &&  
                m.b > 0)  
                {  
                    tt.t = m.t + 2;  
                    tt.b = m.b - 1;  
                }  
                else if (isdigit(map[tt.x][tt.y]))  
                {  
                    tt.t = m.t + 1;  
                    tt.b = m.b + map[tt.x][tt.y] - '0';  
                }
                if (tt.b > m.mb[tt.x][tt.y])  
                {  
                    memcpy(tt.mb, m.mb, 64 * sizeof(int));  
                    tt.mb[tt.x][tt.y] = tt.b;  
                    q.push(tt);  
                }
            }  
        }  
    }  
    return;  
}  
int main()  
{  
    while (1)  
    {  
        scanf("%d%d", &N, &M);  
        if (!N && !M)  
        {  
            break;  
        }  
        int i;  
        int j;  
        for (i = 0; i < N; i++)  
        {  
            scanf("%s", map[i]);  
            for (j = 0; j < M; j++)  
            {  
                if (map[i][j] == 'S')  
                {  
                    startx = i;  
                    starty = j;  
                }  
            }  
        }  
        BFS();  
        printf("%d\n", ans);  
    }  
}  


 

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值