博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LibreOJ】#6298. 「CodePlus 2018 3 月赛」华尔兹 BFS
阅读量:6849 次
发布时间:2019-06-26

本文共 1934 字,大约阅读时间需要 6 分钟。

【题意】给定n*m的网格,起点和终点位置,一些格指定下一步的方向,一些格任意。要求为方向任意的格确定方向,使起点可以走到终点。n,m<=50。

【算法】BFS

【题解】这道题最好用BFS,因为DFS容易陷入死路。

BFS过程中访问过的点标记vis,记录前驱后不用再访问,这是由于:

由于路径不可能走环,所以实际上可以忽略路径自身的影响,只保留能到达某个点的信息,最终到达终点(即访问过的点无需再访问)。

#include
#include
#include
using namespace std;const int maxn=1010;const int fx[]={
0,0,0,1,-1};const int fy[]={
0,1,-1,0,0};int n,m,sx,sy,tx,ty,map[maxn][maxn],p[maxn][maxn];bool v[maxn][maxn];char s[maxn];queue
Q;bool c(int x,int y){
return x>=1&&x<=n&&y>=1&&y<=m&&!v[x][y];}int main(){ scanf("%d%d%d%d%d%d",&n,&m,&sx,&sy,&tx,&ty); for(int i=1;i<=n;i++){ scanf("%s",s+1); for(int j=1;j<=m;j++){ if(s[j]=='.')map[i][j]=0; if(s[j]=='d')map[i][j]=1; if(s[j]=='a')map[i][j]=2; if(s[j]=='s')map[i][j]=3; if(s[j]=='w')map[i][j]=4; } } Q.push(sx);Q.push(sy);v[sx][sy]=1; while(!Q.empty()){ int x=Q.front();Q.pop(); int y=Q.front();Q.pop(); if(x==tx&&y==ty)break; if(map[x][y]>0){ int X=x+fx[map[x][y]],Y=y+fy[map[x][y]]; if(c(X,Y))Q.push(X),Q.push(Y),p[X][Y]=map[x][y],v[X][Y]=1; } else{ for(int i=1;i<=4;i++){ int X=x+fx[i],Y=y+fy[i]; if(c(X,Y))Q.push(X),Q.push(Y),p[X][Y]=i,v[X][Y]=1; } } } int x=tx,y=ty; while(x!=sx||y!=sy){ int X=x-fx[p[x][y]],Y=y-fy[p[x][y]];// map[X][Y]=p[x][y]; x=X;y=Y; } printf("%d %d %d %d %d %d\n",n,m,sx,sy,tx,ty); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(map[i][j]==0||map[i][j]==1)printf("d"); if(map[i][j]==2)printf("a"); if(map[i][j]==3)printf("s"); if(map[i][j]==4)printf("w"); } puts(""); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/onioncyc/p/8511113.html

你可能感兴趣的文章
Struts2 Action多方法调用
查看>>
12.21
查看>>
算法导论读书笔记-第十二章-二分检索树
查看>>
Django - 基于orm实现用户增删改查
查看>>
Application Security Per-Engagement
查看>>
MVC 自定义HtmlHelper
查看>>
毕向东_Java基础视频教程第19天_IO流(06~10)
查看>>
彻底修改eclipse中项目的名称
查看>>
python 类属性初始化
查看>>
hdu2886 Lou 1 Zhuang 数学/快速幂
查看>>
读书笔记之:鸟哥的Linux私房菜——基础学习篇(第三版) (18-26章)
查看>>
angular6 + ng-zorro鹿途后台管理系统(三)项目升级改造 01 升级ng-zorro-antd到1.8+...
查看>>
2.新建一个Angular项目
查看>>
第三次作业
查看>>
2.0 面向对象 类与实例(关键字)、封装、继承、多态(虚方法,抽象类,抽象方法,接口)...
查看>>
《CLR via C#》读书笔记 之 方法
查看>>
杨辉三角形
查看>>
UML作业第四次:分析系统,绘制活动图
查看>>
iOS开发-UILabel和UIButton添加下划线
查看>>
[V1-Team] WEDO创意论坛功能规格说明书
查看>>