栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

带宝物的迷宫问题|BFS|C++|优先队列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

带宝物的迷宫问题|BFS|C++|优先队列

1.题目


输入样例

8 2
########
#S@@@@@#
#@####@#
#@####@#
#@####@#
#@####@#
#b@G@@a#
########

输出样例

19

(最优路径:S→a→G→b→G)

2.分析
  1. 结构体:
struct point{
    int x;
    int y;//位置
    int step=0;//S到该位置的距离
    char ch='a';//准备遇到的宝箱
    point(){}
    point(int _x,int _y,int s=0,char _ch='a'){x=_x;y=_y;step=s;ch=_ch;}
};

2.算法:BFS
优先队列顶储存step最小的point
visited[N][N]已访问列表每当遇见该遇见的宝箱,清零

3.AC代码

【C++】STL里的priority_queue用法总结

#include
#include
using namespace std;

int N,K;

struct point{
    int x;
    int y;
    int step=0;
    char ch='a';
    point(){}
    point(int _x,int _y,int s=0,char _ch='a'){x=_x;y=_y;step=s;ch=_ch;}
};

struct cmp{
    bool operator()(point& p1,point& p2){
        return p1.step>p2.step;//注意最小堆比较>
    }
};

int main(){
    cin>>N>>K;
    string s[N];
    int visited[N][N];
    for(int i=0;i,cmp> Q;
    Q.push(begin);
    while(!Q.empty()){
        point temp=Q.top();
        Q.pop();
        int x1=temp.x;
        int y1=temp.y;
        visited[x1][y1]=1;

        if(s[x1][y1]==temp.ch){
            temp.ch=char(temp.ch+1);
            temp.step++;
            for(int i=0;i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458236.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号