【洛谷p3956】棋盘
日常blog(✧◡✧)
算法:
然后这是2017普及组;
first.关于颜色处理:让c[i][j]=color+1;这样无色=0,红色=1,黄色=2;
然后其实是记忆化,将记答案的数组先初始化为一个很大的数(我初始为了0x3f3f3f3f);
second.dfs主体部分:
1.四个变量:
x,y 存储搜索到的点的位置;
num 存储当前花费
used 存储是否使用过魔法;
2.几个返回的边界
①.当走出地图时,return;
②.当前搜到的值不如之前搜到的优(也包括相同的情况,如果不加相同的情况,重复的会反复搜),return;
③.当搜到最右下(m,m)时,先判断当前搜到的值是否优于之前的值(其实我赶脚不用判断qwq啊亲测不用)因为如果当前值不够优早在②就会被return;
所以如果能递归进判断的,一定更优,那么直接更新就好了;
3.真.主体部分:
1.向四个方向搜索(介里也是很像广搜了)
如果拓展后的节点有颜色,那么判断拓展的节点与当前节点的颜色是否相同
相同的话,花费就不需要增加,直接dfs(xx,yy,num,0);
不同的话,花费需要加1,dfs(xx,yy,num+1,0);
如果拓展节点没有颜色,那么判断当前节点是不是使用过魔法的点,如果是使用过魔法的点,那么显然走不下去了,如果未使用过魔法,就使用巴啦啦能量,把拓展节点变成与当前节点相同的颜色,dfs(xx,yy,num+2,1);
最后不要忘记回溯:c[xx][yy]=0;
判断无解:
如果无解,ans的值就不会更新,为0x3f3f3f3f,如果dfs完,ans=0x3f3f3f3f,说明无解,否则有解,输出ans;
CODE:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=;
char last=' ',ch=getchar();
while(ch>''||ch<'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=(ans<<)+(ans<<)+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
}
int m,n;
int c[][],a[][];
int ans=0x3f3f3f3f;
int dx[]={,,-,,};
int dy[]={,,,,-};
void dfs(int x,int y,int num,int used){
if(x<||y<||y>m||x>m) return;
if(num>=a[x][y]) return;
a[x][y]=num;
if(x==m&&y==m){
ans=num;
return;
}
for(int i=;i<=;i++){
int xx=x+dx[i],yy=y+dy[i];
if(c[xx][yy]){//have color
if(c[xx][yy]==c[x][y]) dfs(xx,yy,num,);
else dfs(xx,yy,num+,);
}
else {
if(!used){
c[xx][yy]=c[x][y];
dfs(xx,yy,num+,);
c[xx][yy]=;
}
}
}
}
int main(){
memset(a,,sizeof(a));
m=read();n=read();
int x,y,color;
for(int i=;i<=n;i++){
x=read();y=read();color=read();
c[x][y]=color+;//no color:0
//red color:1 yellow color:2
}
dfs(,,,);
if(ans==0x3f3f3f3f) printf("-1");
else printf("%d",ans);
return ;
}
end-
【洛谷p3956】棋盘的更多相关文章
- 2017普及组D1T3 洛谷P3956 棋盘
2017普及组D1T3 洛谷P3956 棋盘 原题 题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在 ...
- 洛谷 P3956 棋盘 解题报告
P3956 棋盘 题目描述 有一个\(m×m\)的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能 ...
- 洛谷 P3956 棋盘(BFS)
传送门:Problem P3956 https://www.cnblogs.com/violet-acmer/p/9827010.html 题解: BFS 相关变量解释: color[maxn][ma ...
- 洛谷 P3956 棋盘
题目描述 有一个m ×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上 ...
- 洛谷 P3956 棋盘(记忆化搜索)
嗯... 题目链接:https://www.luogu.org/problem/P3956 这是一道比较好搜的题,注意一些剪枝.预处理和魔法的处理问题(回溯). AC代码: #include<c ...
- 洛谷 P3956 棋盘 题解
每日一题 day5 打卡 Analysis 深搜+剪枝+瞎jb判断 1.越界 2.这个点无色 3.当前的价值已经比答案大 三种情况要剪枝 我搜索里判断要不要施法的时候没判断上一次有没有施法,白调了0. ...
- 洛谷p3956 棋盘(NOIP2017 t3)
在noip考场上本来以为只能骗暴力分,没想到最后A了: 本蒟蒻的做法比较简(zhi)单(zhang):记忆化深搜(考场上本来是想打广搜的,但我深搜稳一点就这样打了): 具体:每个点用一个f数组记录当前 ...
- 洛谷P1436 棋盘分割
洛谷题目链接 动态规划: 我们设状态$f[i][j][o][p][k]$表示一个矩形,左上角顶点坐标为$(i,j)$,右下角顶点坐标为$(o,p)$时分割了$k$次,也就是说现在是$k+1$块 我们考 ...
- 洛谷 P1436 棋盘分割 解题报告
P1436 棋盘分割 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共 ...
随机推荐
- ARM指令集的最新版本包括针对JavaScript的优化
在ARM指令集中,ARMv8.3添加了一个新的float-to-int指令,其错误和超出范围的值按照JavaScript的方式处理.以前[指令]获取JavaScript的语义要慢得多,JavaScri ...
- A1042
洗牌,共洗k次,每次将将原先的牌洗进输入好的位置. 步骤: 1 设置次数k,输入位置数列next[55],填充初始牌序start[55]: 2 end[next[i]]=start[i]把新的牌序赋值 ...
- linux运维、架构之路-Kubernetes离线、二进制部署集群
一.Kubernetes对应Docker的版本支持列表 Kubernetes 1.9 <--Docker 1.11.2 to 1.13.1 and 17.03.x Kubernetes 1.8 ...
- 开发工具Intellij IDEA:常用快捷键
重命名:shift + F6 查看Javadoc/详情:ctrl + Q 查找接口的实现类:ctrl + alt + B format代码:ctrl + alt + L 全局查询:ctrl + shi ...
- 对拍程序 x
一.介绍 在做题或者正式比赛过程中总会把水题做水做乱,但因为样例有坑所以直接过了样例,然后拿去评测结果发现全WA.那如何在这种情况下检查自己程序或算法的正确性呢?对拍是一个简便省事的方案. 所谓“对拍 ...
- HDU 2602 Bone Collector (01背包问题)
原题代号:HDU 2602 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 原题描述: Problem Description Many yea ...
- [ethereum源码分析](5) 创建新账号
前言 在上一章我们介绍了 ethereum运行开启console 的过程,那么在这一章我们将会介绍如何在以太坊中创建一个新的账号.以下的理解可能存在错误,如果各位大虾发现错误,还望指正. 指令分析 指 ...
- 基于python实现自动化办公学习笔记二
word文件(1)读word文件 import win32comimport win32com.client def readWordFile(path): # 调用系统word功能,可以处理doc和 ...
- movable-view组件
movable-view组件:可以移动方块 movable-view组件必须是movable-area的直接子元素,才可以进行操作,才可以移动方块 movable-view组件的属性: directi ...
- (转)JNI参数传递|Surface && sign签名对应
http://blog.csdn.net/stefzeus/article/details/6622011 char* Get_Surface(JNIEnv *env, jclass cls, job ...