2021.08.16 P1300 城市街道交通费系统(dfs)
2021.08.16 P1300 城市街道交通费系统(dfs)
P1300 城市街道交通费系统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:
城市街道交费系统最近创立了。一辆汽车左转一次需付费 11 ,右转一次需付费 55 。只有当前进、左转、右转都无路可走的时候,调头才是允许的,调头每次付费 1010 。
给出一张城市地图,要求你求出从起始点到达终止点的花费最少的路径。幸运的是,所有的道路都是正北、正南、正西或正东方向的。
.
表示障碍区。#
表示道路。E
表示起始点且汽车面朝东。W
表示起始点且汽车面朝西。N
表示起始点且汽车面朝北。S
表示起始点且汽车面朝南。F
表示终点。
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=55;
const int inf=0x3f3f3f;
int n,m,startx,starty,startflag,minn[N][N][4],ans=inf;
char map[N][N];
int disx[5]={-1,0,1,0},disy[5]={0,1,0,-1};
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void dfs(int x,int y,int flag,int v){
if(map[x][y]=='F'){
ans=min(ans,v);
return ;
}
if(minn[x][y][flag]<=v||ans<=v)return ;
minn[x][y][flag]=v;
bool fin=1;
/*for(int i=0;i<4;i++){
int xi=disx[i]+x,yi=disy[i]+y;
if(xi<1||xi>n||yi<1||yi>m||map[xi][yi]=='.')continue;
if(flag==i)dfs(xi,yi,flag,v),fin=0;
else if((flag+1)%4==i)dfs(xi,yi,(flag+1)%4,v+5),fin=0;
else if((flag-1+4)%4==i)dfs(xi,yi,(flag+3)%4,v+1),fin=0;
else if(fin)dfs(xi,yi,(flag+2)%4,v+10),fin=0;
}*/
//啊,对了,万一掉头的方位是0,而其他的方位是1、2、3呢?
for(int i=0;i<4;i++){
int xi=x+disx[i],yi=y+disy[i];
if(xi<1||xi>n||yi<1||yi>m||map[xi][yi]=='.')continue;
if(flag==i)dfs(xi,yi,i,v),fin=0;
}
for(int i=0;i<4;i++){
int xi=x+disx[i],yi=y+disy[i];
if(xi<1||xi>n||yi<1||yi>m||map[xi][yi]=='.')continue;
if((flag+1)%4==i)dfs(xi,yi,i,v+5),fin=0;
}
for(int i=0;i<4;i++){
int xi=x+disx[i],yi=y+disy[i];
if(xi<1||xi>n||yi<1||yi>m||map[xi][yi]=='.')continue;
if((flag+3)%4==i)dfs(xi,yi,i,v+1),fin=0;
}
if(fin){
for(int i=0;i<4;i++){
int xi=x+disx[i],yi=y+disy[i];
if(xi<1||xi>n||yi<1||yi>m||map[xi][yi]=='.')continue;
if((flag+2)%4==i)dfs(xi,yi,i,v+10),fin=0;
}
}
}
int main(){
memset(minn,inf,sizeof(minn));
n=read();m=read();
for(int i=1;i<=n;i++){
scanf("%s",map[i]+1);
for(int j=1;j<=m;j++){
if(map[i][j]=='E')startx=i,starty=j,startflag=1;
else if(map[i][j]=='W')startx=i,starty=j,startflag=3;
else if(map[i][j]=='N')startx=i,starty=j,startflag=0;
else if(map[i][j]=='S')startx=i,starty=j,startflag=2;
}
}
/*for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)cout<<map[i][j]<<" ";
cout<<endl;
}
cout<<endl;*/
dfs(startx,starty,startflag,0);
cout<<ans;
return 0;
}
2021.08.16 P1300 城市街道交通费系统(dfs)的更多相关文章
- 2021.08.16 P1260 工程规划(差分约束)
2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...
- 2021.08.16 P1078 文化之旅(最短路)
2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...
- 2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意)
2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意) P1363 幻象迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 幻象迷宫可以认为是无限 ...
- 2021.08.06 P4392 Sound静音问题(ST表)
2021.08.06 P4392 Sound静音问题(ST表) [P4392 BOI2007]Sound 静音问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 序列a,求 ...
- http://www.cnblogs.com/alipayhutu/archive/2012/08/16/2643098.html
http://www.cnblogs.com/alipayhutu/archive/2012/08/16/2643098.html
- Ubuntu 16.04 LTS 64位系统 安装Docker
本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队 ...
- 2021.12.16 eleveni的刷题记录
2021.12.16 eleveni的刷题记录 1. 数论 https://www.luogu.com.cn/problem/P2532 1.1卡特兰数 https://www.luogu.com.c ...
- 2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分)
2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分) https://www.luogu.com.cn/problem/P2375 题意: PS:这道神题的背景让人疑惑,重 ...
- 2021.08.30 前缀函数和KMP
2021.08.30 前缀函数和KMP KMP算法详解-彻底清楚了(转载+部分原创) - sofu6 - 博客园 (cnblogs.com) KMP算法next数组的一种理解思路 - 挠到头秃 - 博 ...
随机推荐
- VS code 设置中文语言环境(实现语言切换自由)
1.打开vs code,然后按快捷键ctrl+shift+p,输入configure language>回车 2.选择Install Additional Languages... 3.在左侧选 ...
- (leetcode)二叉树的前序遍历-c语言实现
给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 前序遍历 前序遍历首先 ...
- ctf之Flask_fileUpload
启动环境,显示如图: 直接f12产看源码信息: 大致意思是:使用python编写文件然后以图片格式上传系统会以ipython格式解析,就可获取flag. 编写python代码: import os o ...
- 台式机ATX电源:各接口定义、启动方法、电源特点
ATX,英文全称:Advanced Technology Extended,是一种由Intel公司在1995年公布的PC机主板结构规范. ATX电源作用是把交流220V的电源转换为计算机内部使用的直流 ...
- Mybatis配置错误:java.lang.ExceptionInInitializerError
情况一:配置文件,无法被导出或者生效 修改前: 修改后: 究其原因,这是由于Maven的约定大于配置,导致我们写的配置文件,无法被导出或者生效的问题,解决方案: 在pom.xml文件中配置导出非res ...
- Dubbo 用到哪些设计模式?
Dubbo 框架在初始化和通信过程中使用了多种设计模式,可灵活控制类加载.权 限控制等功能. 工厂模式 Provider 在 export 服务时,会调用 ServiceConfig 的 export ...
- 什么是 CAS?
CAS 是 compare and swap 的缩写,即我们所说的比较交换. cas 是一种基于锁的操作,而且是乐观锁.在 java 中锁分为乐观锁和悲观锁.悲观锁是将资源锁住,等一个之前获得锁的线程 ...
- spring-boot 注解集合
@Configuration 用于定义配置类,可替换XML配置文件,被注解的类内部包含一个或多个@Bean注解方法.可以被AnnotationConfigApplicationContext或者Ann ...
- Windows 10 安装 wordpress
如何在Windows上安装wordpress. 安装前准备: 安装并配置好Apache httpd及PHP,见<Windows10安装PHP7+Apache 2.4>. 安装好MySQL, ...
- Effective Java —— 用私有构造器或枚举类型强化单例属性
本文参考 本篇文章参考自<Effective Java>第三版第三条"Enforce the singleton property with a private construc ...