洛谷 P1560 蜗牛的旅行
明显这是一道搜索题,其他题解写的有点复杂,我有更简便的写法
既然题目说走到不能再走,那我们就干脆一点,一条路走到黑,不到南墙不回头,一下把要走的路都走完,不但效率高,也好写,关键是大大节省了系统栈
一口气走很多点的关键在于如何记录一个点是否遍历过呢?退出后又如何删除标记呢?
或许正是这两个问题使一些想到这种解法的人退缩了,但解决这种问题并不难。我们照常可以用一个二维数组记录一个点是否走过,再用一个栈来记录走过的点,退出时,将栈顶依次弹出就好
也许有人会说don't talk,show me your code.
当然是带着代码来的了,口胡可不是我的风格
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#define ll long long
#define gc getchar
#define maxn 125
#define maxm 15000
using namespace std;
inline ll read(){
ll a=0;int f=0;char p=gc();
while(!isdigit(p)){f|=p=='-';p=gc();}
while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=gc();}
return f?-a:a;
}
struct ahaha{
int x,y;
}s[maxm]; //用一个栈来记录已便利的点的坐标 此处建议使用手写栈,而不是STL的栈
int n,m,ans,a[maxn][maxn]; //ans记录最多能走多少点,a数组表示当前点的状态,1为障碍或边界,0为未访问的点,1是已访问的点
const int xx[4]={1,0,-1,0},yy[4]={0,1,0,-1};
void dfs(int x,int y,int sum){ //x,y表示拐点坐标,sum表示走到当前点已走过的点数(包括当前点)
int s1=sum; //s1记录栈大小
for(int i=0;i<4;++i){
int xy=x+xx[i],yx=y+yy[i];
while(!a[xy][yx]){ //若节点可访问,则不断访问直到不能访问
s[++s1]=(ahaha){xy,yx};a[xy][yx]=2;
xy+=xx[i],yx+=yy[i];
}xy-=xx[i],yx-=yy[i]; //最后一个节点不可访问要往回走一个
if(xy==x&&yx==y)continue; //如果在原地没动要返回,避免死循环
ans=max(ans,s1); //ans利用栈大小赋值
if(a[xy+xx[i]][yx+yy[i]]!=2)dfs(xy,yx,s1); //如果下一个点不是已访问的点则继续前进
while(s1>sum){ //撤销标记,弹出栈顶
a[s[s1].x][s[s1].y]=0;
--s1;
}
}
}
char c[5];
int main(){
n=read();m=read();
while(m--){
scanf("%s",c+1);int l=strlen(c+1),sum=0;
for(int i=2;i<=l;++i)
sum=(sum<<3)+(sum<<1)+(c[i]-48);
a[c[1]-'A'+1][sum]=1;
}
for(int i=1;i<=n;++i)
a[0][i]=a[n+1][i]=a[i][0]=a[i][n+1]=1;
a[1][1]=2;s[1]=(ahaha){1,1}; //记得把(1,1)放入栈中,如果不放,答案记得+1
dfs(1,1,1); //(1,1)如果不放就是dfs(1,1,0)
printf("%d\n",ans);
return 0;
}
怎么样是不是简洁又美观呢?喜欢的话,点个赞吧
谢谢您的观看
洛谷 P1560 蜗牛的旅行的更多相关文章
- 洛谷P1560 蜗牛的旅行
题目 搜索,注意判断特殊情况,并且区分开什么时候转弯什么时候停止.然后转弯的时候更是要注意是否会进入障碍. #include <bits/stdc++.h> using namespace ...
- 洛谷P1027 Car的旅行路线
洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- DP【洛谷P2134】 百日旅行
[洛谷P2134] 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场 ...
- 洛谷——P1560 [USACO5.2]蜗牛的旅行Snail Trails
P1560 [USACO5.2]蜗牛的旅行Snail Trails 题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总 ...
- 洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails(不明原因的scanf错误)
P1560 [USACO5.2]蜗牛的旅行Snail Trails 题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总 ...
- 洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails
题目链接 题解 一看题没什么思路.写了个暴力居然可过?! Code #include<bits/stdc++.h> #define LL long long #define RG regi ...
- 洛谷P1522 牛的旅行 Cow Tours
---恢复内容开始--- P1522 牛的旅行 Cow Tours189通过502提交题目提供者该用户不存在标签 图论 USACO难度 提高+/省选-提交该题 讨论 题解 记录 最新讨论 输出格式题目 ...
- 洛谷 P4212 外太空旅行
题目描述 在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了.某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动. 可是n名同学并不是和平相处的.有的人,比如 ...
- 洛谷 P1027 Car的旅行路线
P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路 ...
随机推荐
- dsu on tree总结
dsu on tree 树上启发式合并.我并不知道为什么要叫做这个名字... 干什么的 可以在\(O(n\log n)\)的时间内完成对子树信息的询问,可横向对比把树按\(dfs\)序转成序列问题的\ ...
- c++ 全局变量
一.全局变量 声明 全局变量的定义和一般变量定义相同,不同的就是它的位置.一般会放在所有共享函数的前边. 作用 在函数间共享数据. 二.全局变量的运用 三.作业: 写出代码运行结果: ; //0 in ...
- AngularJS中Directive指令系列 - 基本用法
参考: https://docs.angularjs.org/api/ng/service/$compile http://www.zouyesheng.com/angular.html Direct ...
- Sqlserver新增自增列
if exists(select * from syscolumns where id=object_id('表名') and name='列名') begin alter table 表名 drop ...
- bilibili携手WeTest,保障视频类应用优质适配体验
WeTest 导读 中国移动视频用户规模越来越大,各类移动视频APP也百家争鸣, B站作为国内知名的年轻人文化社区,bilibili在推出移动端时,除了坚持自身的独特定位以外,对其APP的质量也十分重 ...
- Maven学习(十五)-----Maven常用命令
一.Maven常用命令 1.1.Maven 参数 -D 传入属性参数 -P 使用pom中指定的配置 -e 显示maven运行出错的信息 -o 离线执行命令,即不去远程仓库更新包 -X 显示ma ...
- WebGL树形结构的模型渲染流程
今天和大家分享的是webgl渲染树形结构的流程.用过threejs,babylonjs的同学都知道,一个大模型都是由n个子模型拼装而成的,那么如何依次渲染子模型,以及渲染每个子模型在原生webgl中的 ...
- Spring Cloud(三):服务提供与调用 Eureka【Finchley 版】
Spring Cloud(三):服务提供与调用 Eureka[Finchley 版] 发表于 2018-04-15 | 更新于 2018-05-07 | 上一篇文章我们介绍了 Eureka 服务 ...
- python-生成器、迭代器、装饰器
目录 动态语言和静态语言 __slots__ 生成器 迭代器 闭包 装饰器 动态语言和静态语言 动态语言可以在运行的过程中修改代码,例如python在运行的过程中给已创建好的类添加属性和方法. 静态语 ...
- 使用MyBatis遇到的一些需要记录下的问题
(1)MyBaits结果集返回Map,Map集合乱序. xml 中的SQL 输出: 改成: 输出: 目测跟字母顺序有关:ABCDEFGHIJKLMNOPQRSTUVWXYZ (2)需要对字段动态排序 ...