2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS)
2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS)
题意:
给一张n*n的图,起点为A,终点为 B,求从A到B转弯次数最少为多少。
分析:
是否存在路径用DFS,最短路径或最长路径用BFS。只不过先现在需要把以前距离小的放前面改为转弯次数少的放前面,类似于最短路 。
代码如下:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N=110;
int n,startx,starty,endx,endy,a[N][N],vis[N][N][5];
int disx[5]={0,0,0,-1,1},disy[5]={0,1,-1,0,0};
struct node{
int x,y,change,flag;
bool operator <(const node &b)const{
return change>b.change;
}
};
inline void bfs(){
priority_queue<node>q;
vis[startx][starty][1]=vis[startx][starty][2]=vis[startx][starty][3]=vis[startx][starty][4]=1;
q.push({startx,starty,0,1});
q.push({startx,starty,0,2});
q.push({startx,starty,0,3});
q.push({startx,starty,0,4});
while(!q.empty()){
node tmp=q.top();q.pop();
//cout<<tmp.x<<" "<<tmp.y<<" "<<tmp.change<<" "<<tmp.flag<<endl;
for(int i=1;i<=4;i++){
int xi=tmp.x+disx[i],yi=tmp.y+disy[i];
int flagi=i,changei=(tmp.flag==i?tmp.change:tmp.change+1);
//if(xi<1||xi>n||yi<1||yi>n||a[xi][yi]||vis[xi][yi][flagi])continue;
while(xi<=n&&xi>=1&&yi<=n&&yi>=1&&!a[xi][yi]&&!vis[xi][yi][flagi]){
vis[xi][yi][flagi]=1;
q.push({xi,yi,changei,flagi});
if(xi==endx&&yi==endy){
cout<<changei-1;
exit(0);
}
xi+=disx[i];yi+=disy[i];
}
}
}
return ;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
char x;
cin>>x;
if(x=='x')a[i][j]=1;
else if(x=='A')startx=i,starty=j;
else if(x=='B')endx=i,endy=j;
}
}
bfs();
cout<<"-1";
return 0;
}
2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS)的更多相关文章
- 2021.10.29 数位dp
2021.10.29 数位dp 1.数字计数 我们先设数字为ABCD 看A000,如果我们要求出它所有数位之和,我们会怎么求? 鉴于我们其实已经求出了0到9,0到99,0到999...上所有数字个数( ...
- 2021.08.16 P1300 城市街道交通费系统(dfs)
2021.08.16 P1300 城市街道交通费系统(dfs) P1300 城市街道交通费系统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 城市街道交费系统最近创立了.一 ...
- XE6移动开发环境搭建之IOS篇(7):在Mac OSX 10.8中安装XE6的PAServer(有图有真相)
XE6移动开发环境搭建之IOS篇(7):在Mac OSX 10.8中安装XE6的PAServer(有图有真相) 2014-08-22 21:06 网上能找到的关于Delphi XE系列的移动开发环境的 ...
- .NET Conf 2020大会将于2020年11月10日--- 11月12日举行 (UTC)时区
.NET Conf 2020大会将于2020年11月10日--- 11月12日举行 (UTC)时区 开始时间 2020年11月10日 08:00 (PT) | 16:00 (UTC)| 24:00(北 ...
- 10种简单的Java性能优化(转)
本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加入翻译小组.转载请见文末要求. 你是否正打算优化hashCode()方法?是否想要绕开正则表达式?Lukas Eder介绍了 ...
- 10条现代EQ技术基础贴士(转)
前言: 无论是追求复古的模拟音色还是高精度的透明音质,现代电脑音乐制作中层出不断的新EQ插件以其超强的频率塑形和个性化功能为音色的润色和重塑提供了无限可能. 虽然EQ并不是音频工程工具中最复杂的,但是 ...
- 【Win 10 应用开发】UI Composition 札记(五):灯光
UI Composition 除了能够为 UI 元素建立三维空间外,还有相当重要的一个部件——灯光.宇宙万物的精彩缤纷,皆源于光明,光,使我们看到各种东西,除了黑洞之外的世界都是五彩斑谰的.故而,真要 ...
- 【Win 10 应用开发】UI Composition 札记(六):动画
动画在 XAML 中也有,而且基本上与 WPF 中的用法一样.不过,在 UWP 中,动画还有一种表现方式—— 通过 UI Composition 来创建. 基于 UI Composition 的动画, ...
- Linux系统下/tmp目录文件重启后自动删除,不重启自动删除10天前的/TMP的文件(转)
/tmp目录文件重启后自动删除现在知道有ubuntu和solaris系统source:http://blog.chinaunix.net/uid-26212859-id-3567875.html经常会 ...
随机推荐
- 远程调用NFS超时,服务卡死
远程调用NFS超时,服务卡死 如何查看进程中使用了哪些文件句柄?
- Android 12(S) 图形显示系统 - 简单聊聊 SurfaceView 与 BufferQueue的关联(十三)
必读: Android 12(S) 图形显示系统 - 开篇 一.前言 前面的文章中,讲解的内容基本都是从我们提供的一个 native demo Android 12(S) 图形显示系统 - 示例应用( ...
- 洛谷P1091 [NOIP2004 提高组] 合唱队形
本题是一个简单的 LIS(最长上升子序列)问题 只是要求俩次最长上子序列而已 很容易的 首先由于是最长上升子序列 所以朴素法的动态规划表达式为 f[i] = max( f[i] , f[ ...
- 「入门篇」初识JVM
记录于 2022-01-02 17:25:12 GhostFace 1. 什么是JVM? 概念 来自百度百科 JVM是 Java Virtual Machine(Java虚拟机)的缩写,JVM是一 ...
- 学习廖雪峰的Git教程4--继续学习分支管理
查看分支 git branch -a 查看远程分支 git branch 查看本地分支 创建分支 git checkout -b branch-name 在远程创建一个属于自己的分支 删除分支 删除本 ...
- Java并发机制(8)--concurrent包下辅助类的使用
Java并发编程:concurrent包下辅助类的使用 整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920397.html 1.CountDown ...
- kafka follower如何与leader同步数据?
Kafka的复制机制既不是完全的同步复制,也不是单纯的异步复制.完全同步复制要求All Alive Follower都复制完,这条消息才会被认为commit,这种复制方式极大的影响了吞吐率.而异步复制 ...
- Springboot添加静态资源映射addResourceHandlers,可实现url访问
@Configuration //public class WebMvcConfiger extends WebMvcConfigurerAdapter { public class WebMvcCo ...
- Hashtable 与 HashMap 有什么不同之处?
这两个类有许多不同的地方,下面列出了一部分: a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的. b)Hashtable 是同步的,比较慢,但 HashMap ...
- String工具类之“前缀比较”StringUtils.startsWith和StringUtils.startsWithIgnoreCase
(1)字符串以prefix为前缀(区分大小写) StringUtils.startsWith(被比较的字符串,比较字符串) 总结: 根据下面代码发现,上面的例子有部分时错误的,有可能是因为思维原因,他 ...