Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 132  Solved: 75

Description

水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。
为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~
地毯上的格子有N行N列,每个格子用一个0~5之间的数字代表它的颜色。
水叮当可以随意选择一个0~5之间的颜色,然后轻轻地跳动一步,左上角的格子所在的联通块里的所有格子就会变成她选择的那种颜色。这里连通定义为:两个格子有公共边,并且颜色相同。
由于水叮当是施展轻功来跳舞的,为了不消耗过多的真气,她想知道最少要多少步才能把所有格子的颜色变成一样的。

Input

每个测试点包含多组数据。
每组数据的第一行是一个整数N,表示地摊上的格子有N行N列。
接下来一个N*N的矩阵,矩阵中的每个数都在0~5之间,描述了每个格子的颜色。
N=0代表输入的结束。

Output

对于每组数据,输出一个整数,表示最少步数。

Sample Input

2
0 0
0 0
3
0 1 2
1 1 2
2 2 1
0

Sample Output


0
3

对于100%的数据,N<=8,每个测试点不多于20组数据。

HINT

Source

Poetize5

DFS+IDA星

网络流写累了换换口味

其实就是Flood it : http://www.cnblogs.com/SilverNebula/p/5858410.html

 1 /*by SilverN*/
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 #include<vector>
 8 using namespace std;
 9 const int mx[5]={0,1,0,-1,0};
10 const int my[5]={0,0,1,0,-1};
11 const int mxn=10;
12 int read(){
13     int x=0,f=1;char ch=getchar();
14     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
15     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
16     return x*f;
17 }
18 int n,ans;
19 int mp[mxn][mxn];
20 int vis[mxn];
21 int mark[mxn][mxn];
22 int get(){//估价
23     int cnt=0;
24     memset(vis,0,sizeof vis);
25     for(int i=1;i<=n;i++){
26         for(int j=1;j<=n;j++){
27             if(!vis[mp[i][j]] && mark[i][j]!=1){
28                 vis[mp[i][j]]=1;
29                 cnt++;
30             }
31         }
32     }
33     return cnt;
34 }
35 void fill(int x,int y,int co){
36     mark[x][y]=1;
37     for(int i=1;i<=4;i++){
38         int nx=x+mx[i];
39         int ny=y+my[i];
40         if(nx<1 || nx>n || ny<1 ||ny>n || mark[nx][ny]==1)continue;
41         mark[nx][ny]=2;
42         if(mp[nx][ny]==co)fill(nx,ny,co);
43     }
44     return;
45 }
46 int change(int co){
47     bool cnt=0;
48     for(int i=1;i<=n;i++)
49         for(int j=1;j<=n;j++){
50             if(mark[i][j]==2 && mp[i][j]==co){
51                 fill(i,j,co);
52                 cnt=1;
53             }
54         }
55     return cnt;
56 }
57 void DFS(int res,int lim){
58     int tmp=get();
59     if(!tmp){ans=res;return;}
60     if(res+tmp>lim)return;
61     if(ans<1000)return;
62     int cpy[mxn][mxn];
63     for(int i=0;i<=5;i++){
64         memcpy(cpy,mark,sizeof mark);
65         if(change(i))DFS(res+1,lim);
66         memcpy(mark,cpy,sizeof cpy);
67     }
68     return;
69 }
70 int main(){
71     int i,j;
72     while(scanf("%d",&n) && n){
73         memset(mark,0,sizeof mark);
74         ans=1000;
75         for(i=1;i<=n;i++)
76           for(j=1;j<=n;j++)
77             mp[i][j]=read();
78         fill(1,1,mp[1][1]);
79         for(i=1;i;i++){
80             DFS(0,i);
81             if(ans<1000){
82                 printf("%d\n",ans);
83                 break;
84             }
85         }
86     }
87     return 0;
88 }

转载于:https://www.cnblogs.com/SilverNebula/p/6249754.html

Bzoj3041 水叮当的舞步相关推荐

  1. [GMOJ]水叮当的舞步 From lydrainbowcat

    水叮当的舞步 From lydrainbowcat 类型:IDA* (迭代加深启发式搜索) 方法一: 枚举每次选取了哪种颜色,然后找出左上角的格子所在的联通块,改变颜色. 为了避免来回改变.搜索深度过 ...

  2. 3422. 【NOIP2013模拟】水叮当的舞步

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

  3. 【BZOJ】T3041 水叮当的舞步

    题目链接: CODEVS 2495 水叮当的舞步 BZOJ 3041: 水叮当的舞步 这是道IDA*,迭代加深+估价剪枝: 首先考虑估价函数,一般情况下我们把易于计算的操作次数的下限作为A*的估价函数 ...

  4. codevs2495 水叮当的舞步(IDA*)

    2495 水叮当的舞步  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond 题目描述 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物, ...

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

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

  6. 【bzoj3041】水叮当的舞步

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

  7. codevs 2495 水叮当的舞步

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

  8. 【codevs2495】水叮当的舞步

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

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

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

最新文章

  1. HTTP报文简单介绍
  2. Effective java 系列之更优雅的关闭资源-try-with-resources
  3. iframe父页面获取iframe子页面的元素 与 iframe子页面获取父页面元素
  4. android动态加载宽高,动态添加LinearLayout的高度实例
  5. JConsole远程连接配置
  6. 机器学习算法总结--决策树
  7. 几乎是苹果6倍!华为可穿戴设备出货量Q1同比猛增282%
  8. C语言实现的简易FTP客户端
  9. SECS/GEM如何开发
  10. Java物流项目第一天 项目概述与基础数据服务开发
  11. Python将PDF按页转换为图片
  12. Vue 路由 导航守卫(全局守卫、组件内守卫、路由独享守卫)
  13. Python4班平均成绩统计_空中交通管理学院2017级学生 20182019学年第一学期成绩分析报告...
  14. WAF应用防火墙的功能
  15. 微信小程序之网易云音乐(五)- 排行详情页、歌单详情页、播放器组件开发
  16. lnmp分离网站基础架构
  17. linux双系统重启卡光标,Ubuntu 16.04安装完重启后黑屏,光标一直闪
  18. vijos 清点人数
  19. 最常用英语口语200句
  20. 我们如何研发了世界上最酷的调车内燃机车自动驾驶系统

热门文章

  1. java截取屏幕指定范围内的图片并识别图片内的文字
  2. 锐捷RG-12010交换机VSU虚拟化配置
  3. 【学习笔记】seckill-秒杀项目--(4)登录功能总结及优化
  4. 仿安居客首页导航栏及二级下拉菜单Html+Css+JavaScript
  5. CTA-861标准解析EDID的VSDB与VDB
  6. 一首火遍美国的小诗《纽约比加州时间早三个小时》
  7. 命运歌姬服务器停服维护中,命运歌姬2月27日更新什么? 2月27日双端维护内容公告...
  8. 对技术要始终保持敬畏之心!!
  9. html5实现像素鸟,[Swift]SpriteKit实现类似像素鸟的小游戏 - Crashy Plane
  10. bzoj3252 攻略