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;
}

最新文章

  1. [知识笔记]Java 基本数据类型的大小、取值范围、默认值
  2. Go语言实战 - revel框架教程之权限控制
  3. iOS推送(利用极光推送)
  4. [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World
  5. C#的默认可访问性级别
  6. hdu1711 KMP
  7. Oracle 监听器日志文件过大导致监听异常
  8. .NET: C#: Datetime
  9. WIN7开无线
  10. 第三篇:GPU 并行编程的运算架构
  11. Javascript闭包与作用域
  12. HADOOP再进阶:本地Yum软件源安装Cloudera Manager 5
  13. RAID技术介绍和总结
  14. 简单工厂模式,工厂方法模式,抽象工厂模式,spring的狂想
  15. IOS8 : UIAlertController
  16. 试试自行封装AJAX和jQuery中的ajax封装的基本使用
  17. java界面--WePush-master 项目跑起来 -碰到的问题
  18. (一) sublime安装和使用
  19. SQLI DUMB SERIES-8
  20. 把你的Centos设置成代理ip服务器

热门文章

  1. RabbitMQ Go客户端教程6——RPC
  2. async-validator 源码学习笔记(五):Schema
  3. Flutter查漏补缺1
  4. Kruscal algorithm
  5. spring源码-ioc容器周期
  6. MybatisPlus 多租户的常见问题
  7. jQuery--筛选【串联函数】
  8. MySQL_fetch_array 和 MySQL_fetch_object 的区别是 什么?
  9. idea-中的Mark Diretory as的内容
  10. jmeter的安装使用