题目链接:

https://www.luogu.org/problemnew/show/P3956

这个题只要注意一下深度优先搜索或者是宽度优先搜索剪支就行了。纯粹的暴力搜索是不行的,还要注意一下只有一个空格的时候是恒为零的就行了。

以下代码是宽度优先搜索:

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <queue>
using namespace std;
struct node
{bool flag;int color;pair<int ,int>temp;int value;int hei;
}arr[120][120];
int x[5]={0,1,0,-1};
int y[5]={1,0,-1,0};int main()
{int m,n;int fuyi=-1;            //判断是不是可以达到。queue <node>que;scanf("%d %d",&m,&n);if(m==1){cout<<0<<endl;goto xxx;}memset(arr,-1,sizeof(arr));for(int i=0;i<120;i++)for(int j=0;j<120;j++){arr[i][j].temp.first=i;arr[i][j].temp.second=j;arr[i][j].flag=false;arr[i][j].value=~(1<<31);}arr[1][1].value=0;for(int i=0;i<n;i++){int a,b;scanf("%d %d",&a,&b);scanf("%d",&arr[a][b].color);arr[a][b].flag=true;}que.push(arr[1][1]);while(!que.empty()){node temp=que.front();que.pop();arr[temp.temp.first][temp.temp.second].hei=100;for(int i=0;i<4;i++){int thex=temp.temp.first;int they=temp.temp.second;int thex1=thex+x[i];int they1=they+y[i];if(thex1<=m&&thex1>=1&&they1>=1&&they1<=m&&arr[thex1][they1].hei!=100)      //加入的时候判定一下hei是不是等于负一。{if(temp.flag==true){if(thex1==m&&they1==m)fuyi=100;     //其中的逻辑问题吗if(arr[thex1][they1].flag==false){if(temp.value+2<arr[thex1][they1].value){arr[thex1][they1].value=temp.value+2;arr[thex1][they1].color=arr[thex][they].color;que.push(arr[thex1][they1]);}}else if(arr[thex1][they1].color==arr[thex][they].color){//颜色相等。if( temp.value<arr[thex1][they1].value )      //这里。{arr[thex1][they1].value=temp.value;que.push(arr[thex1][they1]);}}else//颜色不等。{if(temp.value+1<arr[thex1][they1].value){arr[thex1][they1].value=temp.value+1;que.push(arr[thex1][they1]);}}}else     //说明是当前的位置是施魔法得来的。{if(thex1==m&&they1==m&&arr[thex1][they1].flag==true)fuyi=100;if(arr[thex1][they1].flag==false){}else if(arr[thex1][they1].color==arr[thex][they].color) //对啊。魔法而来。{if( temp.value<arr[thex1][they1].value )      //这里。{arr[thex1][they1].value=temp.value;que.push(arr[thex1][they1]);}}else{if(temp.value+1<arr[thex1][they1].value){arr[thex1][they1].value=temp.value+1;que.push(arr[thex1][they1]);}}}}}}if(fuyi!=100){cout<<-1<<endl;}else{cout<<arr[m][m].value<<endl;}xxx:;return 0;
}

noip 2017棋盘相关推荐

  1. 【游记】NOIP 2017

    时间:2017.11.11~2017.11.12 地点:广东省广州市第六中学 Day1 T1:看到题目,心想这种题目也能放在T1? 这个结论我之前遇到过至少3次,自己也简单证明过.初见是NOIP200 ...

  2. NOIP 2017 游记

    大家都写,我也来凑热闹 PS:用双拼可真是累啊.. (用双拼打了四行以后我决定以后再也不用双拼了!) DAY 0 颓废日,上午跑到机房颓废可真是爽 但是我坚持自我 day-2时下定决心买了阿里云的服务 ...

  3. NOIP 2017 Day1 T2 时间复杂度 complexity - 模拟题 题解

    作者@豪哒哒哒HaoDaDaDa 转载自简书@豪哒哒哒HaoDaDaDa-简书-NOIP 2017 Day1 T2 时间复杂度 (有一个月没有写简书了-) (这次终于开始拿Markdown写了,富文本 ...

  4. 在9012年1月22日观【NOIP 2017】

    总结:两句话 不会高级算法就搜呗 使劲搜,使劲剪 暴力整起嘛,搜索来起嘛 进入正题 NOIP 2017 D1T1 听说是一道数学竞赛原题 我可要感谢您啊CCF,在学信奥的同时也可以学数竞 现在我来说说 ...

  5. NOIP 2017 提高组 初赛

    NOIP 2017 提高组 初赛 做题感悟. 五.完善程序,是本张试卷最简单的题目,两道题做完,大约花了10分钟.2017-10-17 18:25 对了答案,破天荒,全对. 1.(大整数除法) 有如下 ...

  6. ◆竞赛题目◆◇NOIP 2017 普及组◇ 图书管理员

    ◇NOIP 2017 普及组◇图书管理员 Description 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个 ...

  7. 【NOIP 2017普及组】 图书管理员

    [NOIP 2017普及组] 图书管理员 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一 ...

  8. NOIP 2017 普及组 棋盘 chess

    题解: 这题貌似有dalao用了spfa,膜. 蒟蒻只打了记忆化搜索, 设f[x,y,z]表示[1,1]到[x,y],[x,y]颜色为z的最小值花费. 然后就是一波暴搜了, 剪枝: 搜到[x,y]时颜 ...

  9. NOIP 2017 总结

    NOIP2017 总结 DAY 0 又到了一年一度的NOIP-- 傍晚6点多才从学校出发,到广州已经8点出头了. 不过酒店比之前好了不知道多少,各种设施齐全. 和同学玩耍了一会儿,便进入了梦乡. DA ...

最新文章

  1. 自动驾驶测试:MIL、SIL、PIL、HIL
  2. java怎么判断类相同_java中如何判定两个对象属于同一类 两个对象是不是类的相同实例,即用“===”是什么意思...
  3. 【LESS系列】简介和使用
  4. 应用市场中包名(package name)的唯一性
  5. 猎豹网matlab视频百度云,猎豹网校C++ Primer初级全套视频教程
  6. Oracle查询表结果添加到另一张表中
  7. [UnityShader基础]06.#pragma multi_compile
  8. 【RQNOJ86】智捅马蜂窝【最短路】
  9. 仿苹果响应式官网(含代码!)
  10. 安卓虚拟机_【Android】安卓虚拟机 VMOS
  11. PHP的OpenSSL加密扩展学习(三):证书操作
  12. 当电脑所有浏览器主页被篡改无法修改,一个不用工具解决的方法
  13. Redis 的info命令信息解释
  14. MFC基于对话框上插入MENU菜单栏并点击菜单弹出新窗口
  15. python网络爬虫学习(六)利用Pyspider+Phantomjs爬取淘宝模特图片
  16. BlockChain技术系列(三)- fabric协议介绍
  17. 计算机技术不过影响高考吗,学考不过能参加高考吗 学考没过可以上大学吗
  18. 傻傻分不清楚:裸纤、专线、SDH、MSTP、MSTP+、OTN、PTN、IP-RAN!
  19. SparkStreaming使用SQL
  20. 山西屯兰煤矿爆炸事件说起

热门文章

  1. 仅靠一种普通的泡沫橡胶,这台机器人解决了“爬楼梯”的难题
  2. 一文带你快速读懂.NET CLI
  3. iOS开发UITableView随笔
  4. ansible高级应用示例
  5. BZOJ3775 : 点和直线
  6. 解决windows版 duet display无法正常连接 【看完就会】
  7. Druid 连接池的实用 配置详解
  8. springboo整合security——权限设置
  9. CDH6.3.2默认管理端口是7180,HDFS相关端口
  10. Scala 函数声明及调用案例详解