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)的更多相关文章

  1. 2021.08.16 P1260 工程规划(差分约束)

    2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...

  2. 2021.08.16 P1078 文化之旅(最短路)

    2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...

  3. 2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意)

    2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意) P1363 幻象迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 幻象迷宫可以认为是无限 ...

  4. 2021.08.06 P4392 Sound静音问题(ST表)

    2021.08.06 P4392 Sound静音问题(ST表) [P4392 BOI2007]Sound 静音问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 序列a,求 ...

  5. http://www.cnblogs.com/alipayhutu/archive/2012/08/16/2643098.html

    http://www.cnblogs.com/alipayhutu/archive/2012/08/16/2643098.html

  6. Ubuntu 16.04 LTS 64位系统 安装Docker

    本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队 ...

  7. 2021.12.16 eleveni的刷题记录

    2021.12.16 eleveni的刷题记录 1. 数论 https://www.luogu.com.cn/problem/P2532 1.1卡特兰数 https://www.luogu.com.c ...

  8. 2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分)

    2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分) https://www.luogu.com.cn/problem/P2375 题意: PS:这道神题的背景让人疑惑,重 ...

  9. 2021.08.30 前缀函数和KMP

    2021.08.30 前缀函数和KMP KMP算法详解-彻底清楚了(转载+部分原创) - sofu6 - 博客园 (cnblogs.com) KMP算法next数组的一种理解思路 - 挠到头秃 - 博 ...

随机推荐

  1. 4月3日 python学习总结

    1. 列表生成器 l=['egg%s' %i for i in range(100) if i>20 ] print(l) 若将 [ ] 换成 ( ),则为生成器表达式,结果是一个迭代器 #求文 ...

  2. CF736D Permutations(伴随矩阵)

    CF736D Permutations(伴随矩阵) Luogu 题解时间 首先把边直接放进邻接矩阵, 很明显行列式的奇偶和方案数的奇偶一样. 设 $ A_{ i , j } $ 为矩阵的该行列的余子式 ...

  3. pytest配置文件pytest.ini

    说明: pytest.ini是pytest的全局配置文件,一般放在项目的根目录下 是一个固定的文件-pytest.ini 可以改变pytest的运行方式,设置配置信息,读取后按照配置的内容去运行 py ...

  4. 22.1.7 master公式及O(NLogN)的排序

    22.1.7 master公式及O(NLogN)的排序 1 master 公式 (1) 写公式 T(N) = a * T(N/b) + O(N^d); master公式用来求递归行为的时间复杂度,式中 ...

  5. 论文解读(GRACE)《Deep Graph Contrastive Representation Learning》

    Paper Information 论文标题:Deep Graph Contrastive Representation Learning论文作者:Yanqiao Zhu, Yichen Xu, Fe ...

  6. sqlserver下载地址及密匙

    SqlServer 2017 下载地址及密钥 下载地址: ed2k://|file|cn_sql_server_2017_developer_x64_dvd_11296175.iso|17697771 ...

  7. 解释Spring框架中bean的生命周期?

    Spring容器 从XML 文件中读取bean的定义,并实例化bean. Spring根据bean的定义填充所有的属性. 如果bean实现了BeanNameAware 接口,Spring 传递bean ...

  8. java-idea创建maven管理web项目不能解析EL的解决方法

    默认会原样输出: 这是由于这样子创建的web.xml的版本不够高 2.5之前web.xml文件中的头定义中,el表达式默认是忽略不解析的,故需要显示声明解析el表达式 所以我们要修改版本: 再< ...

  9. dll反编译(修改引用文件、修改代码)再生成dll

    问题描述 我们在日常开发中经常会遇到,想要对dll文件做修改的操作,但苦于没有源代码,只能想想其他办法 解决问题 办法就是通过几个工具来反编译.正向编译.修改属性 反编译.正编译 参考https:// ...

  10. 前端进阶(12) - css 的弱化与 js 的强化

    css 的弱化与 js 的强化 web 的三要素 html, css, js 在前端组件化的过程中,比如 react.vue 等组件化框架的运用,使 html 的弱化与 js 的强化 成为了一种趋势, ...