noip 2017棋盘
题目链接:
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棋盘相关推荐
- 【游记】NOIP 2017
时间:2017.11.11~2017.11.12 地点:广东省广州市第六中学 Day1 T1:看到题目,心想这种题目也能放在T1? 这个结论我之前遇到过至少3次,自己也简单证明过.初见是NOIP200 ...
- NOIP 2017 游记
大家都写,我也来凑热闹 PS:用双拼可真是累啊.. (用双拼打了四行以后我决定以后再也不用双拼了!) DAY 0 颓废日,上午跑到机房颓废可真是爽 但是我坚持自我 day-2时下定决心买了阿里云的服务 ...
- NOIP 2017 Day1 T2 时间复杂度 complexity - 模拟题 题解
作者@豪哒哒哒HaoDaDaDa 转载自简书@豪哒哒哒HaoDaDaDa-简书-NOIP 2017 Day1 T2 时间复杂度 (有一个月没有写简书了-) (这次终于开始拿Markdown写了,富文本 ...
- 在9012年1月22日观【NOIP 2017】
总结:两句话 不会高级算法就搜呗 使劲搜,使劲剪 暴力整起嘛,搜索来起嘛 进入正题 NOIP 2017 D1T1 听说是一道数学竞赛原题 我可要感谢您啊CCF,在学信奥的同时也可以学数竞 现在我来说说 ...
- NOIP 2017 提高组 初赛
NOIP 2017 提高组 初赛 做题感悟. 五.完善程序,是本张试卷最简单的题目,两道题做完,大约花了10分钟.2017-10-17 18:25 对了答案,破天荒,全对. 1.(大整数除法) 有如下 ...
- ◆竞赛题目◆◇NOIP 2017 普及组◇ 图书管理员
◇NOIP 2017 普及组◇图书管理员 Description 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个 ...
- 【NOIP 2017普及组】 图书管理员
[NOIP 2017普及组] 图书管理员 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一 ...
- NOIP 2017 普及组 棋盘 chess
题解: 这题貌似有dalao用了spfa,膜. 蒟蒻只打了记忆化搜索, 设f[x,y,z]表示[1,1]到[x,y],[x,y]颜色为z的最小值花费. 然后就是一波暴搜了, 剪枝: 搜到[x,y]时颜 ...
- NOIP 2017 总结
NOIP2017 总结 DAY 0 又到了一年一度的NOIP-- 傍晚6点多才从学校出发,到广州已经8点出头了. 不过酒店比之前好了不知道多少,各种设施齐全. 和同学玩耍了一会儿,便进入了梦乡. DA ...
最新文章
- 自动驾驶测试:MIL、SIL、PIL、HIL
- java怎么判断类相同_java中如何判定两个对象属于同一类 两个对象是不是类的相同实例,即用“===”是什么意思...
- 【LESS系列】简介和使用
- 应用市场中包名(package name)的唯一性
- 猎豹网matlab视频百度云,猎豹网校C++ Primer初级全套视频教程
- Oracle查询表结果添加到另一张表中
- [UnityShader基础]06.#pragma multi_compile
- 【RQNOJ86】智捅马蜂窝【最短路】
- 仿苹果响应式官网(含代码!)
- 安卓虚拟机_【Android】安卓虚拟机 VMOS
- PHP的OpenSSL加密扩展学习(三):证书操作
- 当电脑所有浏览器主页被篡改无法修改,一个不用工具解决的方法
- Redis 的info命令信息解释
- MFC基于对话框上插入MENU菜单栏并点击菜单弹出新窗口
- python网络爬虫学习(六)利用Pyspider+Phantomjs爬取淘宝模特图片
- BlockChain技术系列(三)- fabric协议介绍
- 计算机技术不过影响高考吗,学考不过能参加高考吗 学考没过可以上大学吗
- 傻傻分不清楚:裸纤、专线、SDH、MSTP、MSTP+、OTN、PTN、IP-RAN!
- SparkStreaming使用SQL
- 山西屯兰煤矿爆炸事件说起