bfs+优先队列(hdu1242)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1242

这题目就是个大坑,先说下思路就是在遇到‘x’时要多停留1步,另外就是要用到优先队列,要从小到大排列,另外就是普通的bfs了

但是要注意题里的each of Angel's friend数据里其实就一个‘r’的位置,但我当多个‘r’做应该也没错就是wa想不通啊
这是我按一个‘r’做的。
#include<stdio.h>
#include<string.h>
#include <iostream>   
#include <queue>   
using namespace std;
struct in
{char b;int x;int y;int t;friend bool operator < (in a, in b){return a.t > b.t; }
};int x, y, m, n;;
char a[205][205],map[205][205];
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
priority_queue<in>p;
int bfs(int xx,int yy)
{   if(xx==x&&yy==y)return 0;in tt,next;tt.x=xx;tt.y=yy;tt.b=a[xx][yy];tt.t=0;p.push(tt);while(!p.empty()){tt=p.top();p.pop();a[tt.x][tt.y]='#';if(tt.x==x&&tt.y==y){return tt.t;}for(int i= 0; i< 4; i++){next.x=tt.x+dir[i][0];next.y=tt.y+dir[i][1];next.t=tt.t+1;if(a[next.x][next.y]=='x')next.t++;if(a[next.x][next.y]!='#'&& next.x< n&& next.x>=0&&next.y<m&&next.y>=0)p.push(next);}}return -1;
}
int main()
{while(~scanf("%d%d", &n, &m)){int x1, y1;memset(map,0,sizeof(map));memset(a,0,sizeof(a));for(int i= 0; i< n; i++){getchar();for(int j= 0; j< m; j++){scanf("%c",&a[i][j]);map[i][j]=a[i][j];if(a[i][j]=='r'){x1=i;y1=j;}if(a[i][j]=='a'){x= i;y= j;}}} int ans=1000000;int u;u=bfs(x1,y1);ans=u;if(ans==-1)printf("Poor ANGEL has to stay in the prison all his life.\n");elseprintf("%d\n",ans);while(!p.empty()){p.pop();}}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/Arthas0v0/p/3456244.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode使用汇总——常用插件、常用配置、常用快捷键

一、代码提示快捷键设置&#xff1a;&#xff08;keybindings.json&#xff09; [{"key": "ctrlj","command": "-workbench.action.togglePanel"},{"key": "ctrlj","command": "editor.action.tri…

HDFS使用JavaAPI操作上传特定副本到datanode

一、首先自然是导包 $HADOOP_HOME/share/hadoop/common/*.jar $HADOOP_HOME/share/hadoop/common/lib/*.jar $HADOOP_HOME/share/hadoop/hdfs/*.jar $HADOOP_HOME/share/hadoop/hdfs/lib/*.jar 二、代码如下 package com.stu.hdfs; /*** * author ysw28* HDFS的API操…

centos php 版本升级 至5.3 wordpress3.7

今天换了主机&#xff0c;wordpress居然出现下面的错误&#xff1a; 您的服务器现在运行的PHP版本为5.1.6&#xff0c;但WordPress 3.7要求的最低版本为5.2.4。 http://www.webtatic.com/packages/php53/ 这里已经准备了 5.3的安装包, 包括相关的扩展 升级命令&#xff1a; rpm…

vuejs深入浅出—基础篇

一、从HelloWorld说起 任何语言的都是从Hello World开始的&#xff0c;VueJs也不例外&#xff0c;直接上代码&#xff1a; <script src"https://unpkg.com/vue/dist/vue.js"></script><div id"demo">{{hello}}</div><script&g…

近百家公司高级运维的面试题汇总

10月1日日考题 画出系统应用架构图写出LVS与nginx的区别当前数据库服务处理速度慢&#xff0c;你认为可能是什么原因导致的&#xff0c;并阐述一下对应的解决办法说一下你知道的存储引擎&#xff0c;建表时如何决定表使用存储引擎单张表过大有什么缺点&#xff0c;如何解决给你…

Linux idle基础

2019独角兽企业重金招聘Python工程师标准>>> Linux系统越来越受到电脑用户的欢迎&#xff0c;于是很多人开始学习Linux时&#xff0c;学习linux&#xff0c;你可能会遇到linux内核问题&#xff0c;这里将介绍linux内核中idle知识。 1. idle是什么 简单的说idle是一…

PowerDesigner版本控制器设置权限

PowerDesigner版本控制权限之前一直在Groups里面设置&#xff0c;一直没有效果&#xff0c;原因终于找出来了&#xff0c;PowerDesigner是要对每个库单独赋权限的&#xff0c;步骤如下&#xff1a; 连接上版本控制&#xff0c;在左侧菜单 Object Browser里面&#xff0c;找到你…

IT运维面试问题总结-运维工具、开源应用(Ansible、Ceph、Docker、Apache、Nginx等)

1、简述Ansible及其优势&#xff1f; Ansible是一款极其简单的开源的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。实现了批量系统配置&#xff0c;批量程序部署&#xff0c;批量运行命令等功能。同…

程序员进阶之路—如何独当一面

今天和大家分享一下&#xff0c;程序员如何独当一面这个话题&#xff0c;这是一个很大的话题&#xff0c;我把他分成三部分来谈&#xff1a;  一、需求转换的能力或者叫理解需求的能力&#xff1b;  二、分配时间的能力&#xff1b;  三、开发质量的问题&#xff1b; 我…

html跨浏览器兼容性问题

之前写代码没注意到&#xff0c;这次学习了。 首先 img的width和height属性在IE浏览器中不起作用&#xff0c;可以设置一个div&#xff0c;让img标签在div块中&#xff0c;div中设置style:overflow:hidden,然后用div的宽和高来定义图片的宽和高。 第二个就是&#xff0c;clear:…

Spring经典面试题

文章目录 Spring概述&#xff08;10&#xff09; 什么是spring?Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么Spring的优缺点是什么&#xff1f;Spring有哪些应用场景Spring由哪些模块组成&#xff1f;Spring 框架中都用到了哪些设计模式&#xff1f;详细…

JDBC 获取被插入数据的主键ID值

除了用存储过程还有以下方法可以获取&#xff1a; static int create() throws SQLException { Connection conn null; PreparedStatement ps null; ResultSet rs null; try { // 2.建立连接 conn JdbcUtils.getConnection(); // …

MySQL 5.6的新特性

MySQL 5.6是一个主要的版本发布&#xff0c;它在性能、可伸缩性、可靠性和可用性方面引入了多项重要改进和新特性。它在2013年发布&#xff0c;相比于它的前身MySQL 5.5&#xff0c;MySQL 5.6带来了以下关键升级&#xff1a; 优化的InnoDB存储引擎&#xff1a;MySQL 5.6中的Inn…

简易数字时钟软件详细制作过程

这是我自己用VS2010制作的简易数字时钟小软件&#xff0c;在制作过程中收获知识不少&#xff0c;希望和初学MFC编程的朋友分享一下。 一、其功能有一下三点&#xff1a; 1.打开软件后&#xff0c;其程序自动获取当前电脑系统的日期、时间和周次&#xff0c;并同步显示在主对 …

关于后台系统自动生成的一点思考

大量实践发现后台管理程序&#xff0c;其实90%的代码都是相同的&#xff0c;当然是在抛弃复杂逻辑业务的情况下&#xff0c;那么如何能高效的节约这些时间呢&#xff0c;那就是接下来我要说的&#xff0c;对于后台系统自动生成的一些思考。 适用情景&#xff1a; 1、表编号id为…

MFC定时器SetTimer函数用法总结

CWnd类的SetTimer成员函数只能在CWnd类或其派生类中调用&#xff0c;而API函数SetTimer则没有这个限制&#xff0c;这是一个很重要的区别。 1、启动定时器。 启动定时器就需要使用CWnd类的成员函数SetTimer。CWnd::SetTimer的原型如下&#xff1a; 参数nIDEvent指定一个非零的…

全网最全的Numpy开发入门教程(详细案例版)

概述 NumPy是一个Python库&#xff0c;每个数据科学专业人员都应该熟悉它这个全面的NumPy教程从头开始介绍NumPy&#xff0c;从基本的数学运算到NumPy如何处理图像数据本文中有大量的Numpy概念和Python代码 介绍 我非常喜欢Python中的NumPy库。在我的数据科学之旅中&#xff…

android开源库收集

1. google valley Android网络通信库 git clone https://android.googlesource.com/platform/frameworks/volley 介绍 http://www.cnblogs.com/bvin/p/3291611.html#2806770 http://liubin.org/2013/05/27/android-volley-at-a-glance/ 2.Afinal是一个android的ioc&#xff…

微信分享JSSDK-invalid signature签名错误的解决方案

核对官方步骤&#xff0c;确认签名算法。 确认签名算法正确&#xff0c;可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?tjsapisign 页面工具进行校验。确认config中nonceStr&#xff08;js中驼峰标准大写S&#xff09;, timestamp与用以签名中的对应noncestr, timesta…

MFC操作Excel2003的CRange类的Copy函数和Delete函数实现方法

一、CRange类的Copy函数实现方法 具体步骤&#xff1a; 1.实例化一个CRange类对象range1&#xff0c;关联你要拷贝的区域&#xff1b; 2.实例化一个CRange类对象range2&#xff0c;关联你要将要粘贴到的区域&#xff1b; 3.调用前一个range1对象的Copy函数&#xff0c;就可…