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

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

带宝物的迷宫问题|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					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5433751.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存