题目

水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。

为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~

地毯上的格子有N行N列,每个格子用一个0~5之间的数字代表它的颜色。

水叮当可以随意选择一个0~5之间的颜色,然后轻轻地跳动一步,地毯左上角的格子所在的联通块里的所有格子就会变成她选择的那种颜色。这里连通定义为:两个格子有公共边,并且颜色相同。

由于水叮当是施展轻功来跳舞的,为了不消耗过多的真气,她想知道最少要多少步才能把所有格子的颜色变成一样的。

分析

我们迭代加深,枚举答案限制,

BFS枚举每次选择哪种颜色,当枚举次数超过限制,就退出。否则如果BFS出答案就输出。

这样只能拿10分,

加上IDA,估价函数为图中大颜色数减一,

当枚举的深度加上估价函数大于限制就退出,

接着发现在枚举左上角所在的联通快时很浪费时间,

我们用一个一个N
N的v标记数组。左上角的格子所在的联通块里的格子为1,左上角联通块周围一格的格子为2,其它格子都为为0。如果某次选择了颜色c,我们只需要找出标记为2并且颜色为c的格子,向四周扩展,再修改v标记,就可以不断修改标记,但所有格子都为1,就是答案了。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
const int maxlongint=2147483647;
using namespace std;
int n,m,ans;
int z1[4][2]={{1,0},{0,1},{-1,0},{0,-1}},f,a[9][9],t;
int mark[9][9];
bool colour[6];
int makeh()
{
int h1=0;
memset(colour,true,sizeof(colour));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if((mark[i][j]!=1 && colour[a[i][j]]))
{
colour[a[i][j]]=false;
h1++;
}
}
return h1;
}
void put(int x,int y,int z)
{
mark[x][y]=1;
for(int i=0;i<=3;i++)
{
int xx=x+z1[i][0],yy=y+z1[i][1];
if((xx<1 || yy<1 || xx>n || yy>n || mark[xx][yy]==1)) continue;
if(a[xx][yy]==z)
put(xx,yy,z);
else
mark[xx][yy]=2;
}
}
bool q(int color)
{
bool p=false;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if((mark[i][j]==2 && a[i][j]==color))
{
p=true;
put(i,j,color);
}
}
return !p;
}
void dg(int g)
{
int h=makeh();
if(!h)
{
t=true;
return;
}
if(g+h>f) return;
int copy1[9][9];
memcpy(copy1,mark,sizeof(copy1));
for(int color=0;color<=5;color++)
{
if(!q(color) && !t)
dg(g+1);
memcpy(mark,copy1,sizeof(mark));
}
}
int main()
{
while(1)
{
scanf("%d",&n);
if(!n) break;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
}
memset(mark,0,sizeof(mark));
put(1,1,a[1][1]);
for(f=0;;f++)
{
t=0;
dg(0);
if(t)
break;
}
printf("%d\n",f);
}
}

【NOIP2013模拟】水叮当的舞步的更多相关文章

  1. codevs 2495 水叮当的舞步

    题目链接:水叮当的舞步 我现在开始发题目链接了(主要还是因为懒得整理题面)-- 这道题一开始是看到MashiroSky在写,于是我也开始写这道题了(说白了就是狙击他)-- 这道题看到这么小的范围当然给 ...

  2. 【IDA*】codevs 2495:水叮当的舞步

    2495 水叮当的舞步 题目描述 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上 ...

  3. bzoj 3041: 水叮当的舞步 迭代加深搜索 && NOIP RP++

    3041: 水叮当的舞步 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 72  Solved: 44[Submit][Status] Descript ...

  4. 【BZOJ3041】水叮当的舞步 迭代深搜IDA*

    [BZOJ3041]水叮当的舞步 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变.为了讨好她的偶像虹猫,水叮当决定在地毯上跳 ...

  5. [codevs2495]水叮当的舞步

    [codevs2495]水叮当的舞步 试题描述 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈 ...

  6. bzoj3041 水叮当的舞步 IDA*

    水叮当的舞步 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 230  Solved: 107[Submit][Status][Discuss] Des ...

  7. BZOJ 3041 水叮当的舞步

    3041: 水叮当的舞步 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 120  Solved: 67[Submit][Status][Discuss ...

  8. Bzoj3041 水叮当的舞步

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 132  Solved: 75 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物 ...

  9. 【wikioi】2495 水叮当的舞步(IDA*)

    http://wikioi.com/problem/2495/ 这题我还是看题解啊囧.(搜索实在太弱.完全没想到A*,还有看题的时候想错了,.,- -) 好吧,估价还是那么的简单,判断颜色不同的数目即 ...

随机推荐

  1. CoverflowJS

    coverflow是苹果首创的将多首歌曲的封面以3D界面的形式显示出来的方式 GitHub地址:[https://github.com/coverflowjs/coverflow] 下载地址:[htt ...

  2. unity中的常遇到的问题

    1.使用unity的MovieTexture播放视频在物体上,对象只能在电脑上 2.移动端播放全屏视频 Handheld.PlayFullScreenMovie(),视频文件必须放置在Streamin ...

  3. 【Qt开发】QScrollArea添加布局后没有出现滚动条的解决方法

    [Qt开发]QScrollArea添加布局后没有出现滚动条的解决方法 标签:[Qt开发] 说明:尝试利用滚动区域显示多张图片,为了能够动态地往滚动区域贴图,为滚动区域设置了布局,然后通过布局来添加wi ...

  4. 微信小程序资源整理

    微信小程序相关的文档.教程.开源项目等资源的整理,以便于开发学习使用. —— —— 收录仅作个人学习使用,涉及侵权行为及时联系: maple_6392@163.com 项目地址:GitHub | 码云 ...

  5. 小记-----一些linux操作小操作

    lrzsz工具 window系统与linux系统 文件互传      1.在linux系统命令行:sudo yum install lrzsz  或者  yum install lrzsz (输入一个 ...

  6. “laravel.log” could not be opened: failed to open stream

    百度了一下,说是要赋权限,按照操作赋了权限也还是报错,其实只要执行第一个就好,但为了保险起见,我都执行了,还是不行 chmod -R /storage chmod -R /storage/logs c ...

  7. python爬虫常用第三方库

    这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycurl). pycurl – 网络 ...

  8. LeetCode_9_回文数字

    回文数(LeetCode 9) 1.题目 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: - ...

  9. input搜索框实时检索功能实现(超简单,核心原理请看思路即可)

    问题:实现input搜索框实时检索的功能,类似哔哩哔哩首页搜索功能(壮哉我大b站!).公司要求,emmmm没办法,果然懒人是要被赶着走才会进步的说,诶嘿O(∩_∩)O. 解决方法: 1.参考资料:ht ...

  10. Jquery复习(九)之noConflict()

    如何在页面上同时使用 jQuery 和其他框架? jQuery 和其他 JavaScript 框架 正如您已经了解到的,jQuery 使用 $ 符号作为 jQuery 的简写. 如果其他 JavaSc ...