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

最新文章

  1. ASP.NET跨平台实践:无需安装Mono的Jexus“独立版”
  2. ComponentOne 2016 V3 发布
  3. spring security 3.2 配置详解(结合数据库)
  4. 使用Struts2标签遍历集合
  5. python——挖装饰器祖坟事件
  6. Windows 8.1 with update 官方最新镜像汇总
  7. 什么是automatic variable?
  8. python核心编程第六章练习6-8
  9. STL容器的适用情况
  10. Android笔记——RecyclerView替代ListView
  11. AOJ 2170 Marked Ancestor (基础并查集)
  12. hdu 4800 Josephina and RPG
  13. Android中使用proguardgui混淆jar包
  14. nyoj 最少步数
  15. T-SQL 删除重复数据SQL
  16. hibernate关联对象的增删改查------查
  17. $.each()和$().each(),以及forEach()的用法
  18. 第三方工具系列--Lombok常用注解
  19. vue computed的执行问题
  20. day22 time模块

热门文章

  1. vue学习【一】vue引用封装echarts并展示多个echarts图表
  2. 多Y轴,下拉框渲染,相同类型不同数据
  3. linux下sendmail邮件系统安装详情
  4. RabbitMQ核心技术总结
  5. 002-loganalyzer装完报错no syslog records found
  6. .htaccess 一段神奇的跳转代码
  7. 拒绝被坑!如何用Python和数据分析鉴别刷单!?
  8. 2017 去哪儿网 研发4.18(offer)
  9. SparkStreaming HA高可用性
  10. IDEA 配置热更新