最小费用 (BFS+priority_queue)
时间:2019-09-06
本文章向大家介绍最小费用 (BFS+priority_queue),主要包括最小费用 (BFS+priority_queue)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目
题解
这题用单纯的广搜无法得到最小的答案,需要在广搜的基础上加上优先队列。
Code
#include<bits/stdc++.h> #define debug1(x) cout<<#x<<"="<<x<<endl #define debug2(x,y) cout<<#x<<"="<<x<<' '<<#y<<"="<<y<<endl using namespace std; const int maxn=1e4+10; typedef long long ll; struct node { int x,y,cost; bool operator<(const node &a)const{ //结构体重载小于号 return cost>a.cost; //优先队列默认是从大到小,此处操作使其变为从小到大排序 } }Q,B; int main() { int n,m,qx,qy,zx,zy; int next[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; while(~scanf("%d%d",&n,&m)) { getchar(); char G[105][105]={}; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ scanf("%c",&G[i][j]); } getchar(); } scanf("%d%d%d%d",&qx,&qy,&zx,&zy); if(qx==zx&&qy==zy){ printf("0\n"); continue; } int book[105][105]={},tx,ty,y=0,ans=0; priority_queue<node>que; que.push({qx,qy,0}); book[qx][qy]=1; while(!que.empty()) { B=que.top();//和普通的bfs不一样,这里需要先把队头存起来,否则下面元素入队后因为是优先队列所以队头可能会发生变化 que.pop();//这里也要先将队头pop掉,因为优先队列可能会使队头元素发生改变 for(int i=0;i<4;i++){ tx=B.x+next[i][0]; ty=B.y+next[i][1]; if(tx<0||tx>=n||ty<0||ty>=m) continue; if(!book[tx][ty]){ book[tx][ty]=1; Q.x=tx,Q.y=ty; if(G[tx][ty]==G[B.x][B.y]) Q.cost=B.cost; else Q.cost=B.cost+1; que.push(Q); } if(tx==zx&&ty==zy){ ans=Q.cost; y=1; break; } } if(y) break; } printf("%d\n",ans); } return 0; } /* 3 3 xyx xxx xyx 0 0 2 1 answer:1 */
原文地址:https://www.cnblogs.com/HOLLAY/p/11478715.html
- Spring boot with Velocity template
- Oracle 11g R2 RAC 高可用连接特性 – SCAN 详解
- Spring boot · 链接池配置
- Linux下命令行图片格式转换
- 用SQL解一道有趣的数学题:Gauss和Poincare
- OpenSSL 转换证书格式
- 电子邮件服务器DKIM配置
- 自相矛盾:一个进程可以自成死锁么?
- 数据库安全·开发加密插件
- wordpress无法安装这个包。: PCLZIP_ERR_MISSING_FILE (-4) : Missing archive file 'C:WINDOWSTEMP/wordpress-4.
- 数据库安全·数据加密
- Medium网友开发了一款应用程序 让学习算法和数据结构变得更有趣
- 数据库安全·Token 认证
- 数据库安全·用户/角色认证
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在Laravel的Model层做数据缓存的实现
- Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
- php连接mysql数据库最简单的实现方法
- 解决laravel id非自增 模型取回为0 的问题
- PHP7.0连接DB操作实例分析【基于mysqli】
- Laravel获取当前请求的控制器和方法以及中间件的例子
- laravel中数据显示方法(默认值和下拉option默认选中)
- laravel请求参数校验方法
- ThinkPHP 5.x远程命令执行漏洞复现
- 关于php开启错误提示的总结
- php创建类并调用的实例方法
- php异常处理捕获错误整理
- 可视化IDE的探索之路
- php模式设计之观察者模式应用实例分析
- python进程与线程小结实例分析