P3956 棋盘
P3956 棋盘
题解
注释都在代码里了
这道题可以用DFS做,记忆化搜索,维护一个money[ ][ ] 表示到达当前节点的最小花费
不需要记录VIS,因为有一个最小值判断,如果走重复的话一定会得到一个更大的花费,那就直接退出了
代码
#include<bits/stdc++.h> using namespace std; int m,n;
int clor[][],money[][];
//clor是记录颜色的数组 ,0无色,1红色,2黄色
//money是记录走到(x,y)的最少花费
int dx[]={-,,,},dy[]={,-,,};
int x,y,c;
bool flag=; //判断有无解 bool pan(int x,int y)
{
return x>=&&x<=m&&y>=&&y<=m;
} void dfs(int x,int y,int step,bool use)
//走到了(x,y),话费为step,use表示是否使用了魔法
{
if(!pan(x,y)) return; //不合法直接退出
if(step>=money[x][y]) return ;
//最小值判断
//如果走到(x,y)的花费比之前搜到的结果还大,那么直接退出
money[x][y]=step;
//更新成更小花费
if(x==m&&y==m)
{
flag=;
return;
}//有解
for(int i=;i<=;i++) //四连通深搜
{
int xx=x+dx[i],yy=y+dy[i];
if(pan(xx,yy)) //新节点合法
{
if(clor[xx][yy]!=) //新节点有颜色
{
if(clor[xx][yy]==clor[x][y]) //新节点与原来节点同色
dfs(xx,yy,step,); else //新节点与原来节点不同色
dfs(xx,yy,step+,);
}
else if(!use) //新节点无色,没有使用过魔法,可以使用魔法
{
clor[xx][yy]=clor[x][y]; //暂时变色
dfs(xx,yy,step+,);
clor[xx][yy]=; //回溯
}
}
} } int main()
{
scanf("%d%d",&m,&n);
memset(money,0x3f,sizeof(money)); //初始化极大值
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&c);
clor[x][y]=c+;
}
dfs(,,,);
if(flag==)
{
printf("%d\n",money[m][m]);
}
else
{
printf("-1\n");
} return ;
}
P3956 棋盘的更多相关文章
- 洛谷 P3956 棋盘 解题报告
P3956 棋盘 题目描述 有一个\(m×m\)的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能 ...
- 2017普及组D1T3 洛谷P3956 棋盘
2017普及组D1T3 洛谷P3956 棋盘 原题 题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在 ...
- P3956 棋盘——普及题,儿童搜索
P3956 棋盘 这道搜索弄得我很难受. 第一,一定要看清楚题在写.第二,弄清楚判断条件: 首先图的大小是m*m不是n*m; 然后就是当前有颜色的点是不用变颜色的: #include<cstdi ...
- 【洛谷】【搜索(dfs)】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数组记录当前 ...
随机推荐
- PHP--API
PHP所有能力都是函数,内置1000多个函数,不是每一个函数都默认直接可以使用,有一些需要安装或者启用额外的“插件”扩展. 1,获取字符串长度 <?php $str='hello'; echo ...
- echarts图表自适应盒子的大小(盒子的大小是动态改变的),大到需要全屏展示
项目中用到了echarts,并且页面是自适应的,且页面中有一个[放大.缩小]功能,因此图表还需要根据盒子的大小来变化. 即:两个需求,如下: ① 图表根据窗口的大小自适应 ② 图表根据所在盒子的大小自 ...
- eclipses配置tomcat
1,项目右键属性,设置为1.8,与jdk相对应 2,自动发布,tomcat 3,使用自己的tomcat 4,
- Delphi 监视数据的值
- 单节点oracle、ASM 详细安装步骤
目录 1.安装环境 2.系统要求 2.1 Linux安装Oracle系统要求 1.查看RAM和交换空间以及磁盘大小 2.检查所需软件包 3.配置host和主机名 2.2修改操作系统核心参数 1.创建相 ...
- vim简明教程--半小时从入门到精通
https://download.csdn.net/download/qccz123456/10567716 vim三种模式:命令模式.插入模式.底行模式.使用ESC.i.:切换模式. vim [路径 ...
- Codeforces Round #581 (Div. 2)A BowWow and the Timetable (思维)
A. BowWow and the Timetable time limit per test1 second memory limit per test256 megabytes inputstan ...
- ora 12518监听程序无法分发客户机连接
首先修改ORACLE的PROCESS.SESSION数量 查看当前ORALCE PROCESS数量 SQL> show parameter process 查看当前ORALCE SESSION数 ...
- qt5-信号和槽
信号函数: connect(btn,&QPushButton::clicked,this,&QWidget::close); //参数1 信号发送者://参数2 信号:---& ...
- CSS定位——文档流定位
关于CSS的定位机制Ⅰ ㈠概念 对于盒子模型来说,也就是页面元素,这些盒子究竟在页面的什么位置,怎样排列它,那么找到它的位置,确定它的位置,这个就是定位机制所决定的. ㈡分类 文档流, 浮动定位,层定 ...