(1649)ZOJ

本文介绍了一种使用广度优先搜索(BFS)算法解决迷宫中从起点到终点最短时间路径的问题,并通过特殊处理确保了算法的有效性和正确性。
#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>


#define ll __int64
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0xfffffff
#define mod 1000000007


using namespace std;


/*
题意:
想法:BFS,这里有特殊处理。当到达x,y点时的时间小于之前算出的时间就会更新,这样可以保证最小时间。
*/
int dir[4][2] = {-1,0,0,1,1,0,0,-1};


struct point
{
    int x;
    int y;
    int time;
    int step;
};


queue<point>Q;
int N,M;
char ma[1009][1009];
int mintime[1009][1009];//到达x,y点的最小时间
int sx,sy,dx,dy;


int BFS(point x)
{
    Q.push(x);
    point hd;
    while(!Q.empty())
    {
        hd = Q.front();
        Q.pop();
        for(int i = 0;i<4;i++)
        {
            int xx = hd.x + dir[i][0];
            int yy = hd.y + dir[i][1];
            if(xx<0||xx>=N||yy<0||yy>=M) continue;
            if(ma[xx][yy]!='#')
            {
                point t;
                t.x = xx;
                t.y = yy;
                t.step = hd.step + 1;
                t.time = hd.time + 1;
                if(ma[xx][yy] == 'x')//如果遇到警察就时间加一
                    t.time++;
                if(t.time < mintime[xx][yy])//如果新运算出的时间更小,就更新
                {
                    mintime[xx][yy] = t.time;
                    Q.push(t);
                }
            }
        }
    }
    return mintime[dx][dy];//返回到达dx,dy的时间
}


int main()
{
    while(~scanf("%d%d",&N,&M))
    {
        for(int i = 0;i<N;i++)
            scanf("%s",ma[i]);
        for(int i = 0;i<N;i++)
        {
            for(int j = 0;j<M;j++)
            {
                mintime[i][j] = INF;
                if(ma[i][j] == 'r')
                {
                    sx = i;
                    sy = j;
                }
                if(ma[i][j] == 'a')
                {
                    dx = i;
                    dy = j;
                }
            }
        }
        point start;
        start.x = sx;
        start.y = sy;
        start.step = 0;
        start.time = 0;
        mintime[sx][sy] = 0;
        int ans = BFS(start);
        if(ans<INF)
        {
            printf("%d\n",ans);
        }
        else
            puts("Poor ANGEL has to stay in the prison all his life.");


    }
   return 0;
}
【顶级EI完整复现】【DRCC】考虑N-1准则的分布鲁棒机会约束低碳经济调度(Matlab代码实现)内容概要:本文介绍了名为《【顶级EI完整复现】【DRCC】考虑N-1准则的分布鲁棒机会约束低碳经济调度(Matlab代码实现)》的技术资源,聚焦于电力系统中低碳经济调度问题,结合N-1安全准则与分布鲁棒机会约束(DRCC)方法,提升调度模型在不确定性环境下的鲁棒性和可行性。该资源提供了完整的Matlab代码实现,涵盖建模、优化求解及仿真分析全过程,适用于复杂电力系统调度场景的科研复现与算法验证。文中还列举了大量相关领域的研究主题与代码资源,涉及智能优化算法、机器学习、电力系统管理、路径规划等多个方向,展示了广泛的科研应用支持能力。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源调度、智能电网相关工作的工程师。; 使用场景及目标:①复现高水平期刊(如EI/SCI)关于低碳经济调度的研究成果;②深入理解N-1安全约束与分布鲁棒优化在电力调度中的建模方法;③开展含新能源接入的电力系统不确定性优化研究;④为科研项目、论文撰写或工程应用提供可运行的算法原型和技术支撑。; 阅读建议:建议读者结合文档提供的网盘资源,下载完整代码与案例数据,按照目录顺序逐步学习,并重点理解DRCC建模思想与Matlab/YALMIP/CPLEX等工具的集成使用方式,同时可参考文中列出的同类研究方向拓展研究思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值