当前位置: 首页 > news >正文

微信开发网站/上海网站推广广告

微信开发网站,上海网站推广广告,学做网站哪里学,海尔网站建设水平Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上的格子有N行N列,每个格子用一个0~…

Description

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

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

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

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

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

Input

每个测试点包含多组数据。

每组数据的第一行是一个整数N,表示地摊上的格子有N行N列。

接下来一个N*N的矩阵,矩阵中的每个数都在0~5之间,描述了每个格子的颜色。

N=0代表输入的结束。

Output

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

Sample Input

20 0 0 030 1 21 1 22 2 10

Sample Output

03

Data Constraint

对于30%的数据,N<=5

对于50%的数据,N<=6

对于70%的数据,N<=7

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

Solution

水叮当的舞步 From lydrainbowcat
类型:IDA* (迭代加深启发式搜索)
方法一:
枚举每次选取了哪种颜色,然后找出左上角的格子所在的联通块,改变颜色。
为了避免来回改变、搜索深度过大,采用迭代加深的dfs限制搜索步数。
迭代加深也就是,依次限制搜索深度为0、1、2、3…… 进行搜索,搜索过程中发现深度超过限制就马上退出。只要搜索成功就找到了答案,也可以立即退出。
期望得分:0~10分。
方法二:
加入一个小剪枝:如果改变颜色后,左上角格子所在的联通块大小没有改变,可以剪枝。这样可以避免来回往复地搜索。
期望得分:10~20分。
方法三:
采用IDA*算法,设计估价函数。可以发现如果当前矩阵中除了左上角的联通块之外,共有M种颜色,那么还需要的步数不小于M。因此如果当前搜索深度+估价函数的值>深度限制,可以回溯。
期望得分:50~70分。
方法四:
我们可以发现,每次寻找左上角的格子所在的联通块耗费的时间常数巨大。因此我们在这里寻求突破。
我们引入一个N*N的v数组。左上角的格子所在的联通块里的格子标记为1。左上角联通块周围一圈格子标记为2,其它格子标记为0。如果某次选择了颜色c,我们只需要找出标记为2并且颜色为c的格子,向四周扩展,并相应地修改v标记,就可以不断扩大标记为1的区域,最终如果所有格子标记都是1,那么显然找到了答案。
期望得分:90~100分。


Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10
#define I int
#define F(i,a,b) for(I i=a;i<=b;i++)
#define mem(x,y) memset(x,y,sizeof(x))
using namespace std;
I n,m,a[N][N],bz[N][N],ok,tot,ans,v[7],fx[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
I read(){I x=0;char ch=getchar();while(ch<'0'||ch>'9'){ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x;
}
void dg(I c,I x,I y){bz[x][y]=1;F(k,0,3){I xx=x+fx[k][0],yy=y+fx[k][1];if(xx>0&&yy>0&&xx<=n&&yy<=n&&bz[xx][yy]!=1){bz[xx][yy]=2;if(c==a[xx][yy]) dg(c,xx,yy); }}
}
void dfs(I x){I t=0;mem(v,0);F(i,1,n)F(j,1,n) if(!v[a[i][j]]&&bz[i][j]!=1) t+=(v[a[i][j]]=1);if(!t) ok=1;if(x+t>ans||ok) return;I b[N][N];F(c,0,5){b[0][0]=0;F(i,1,n)F(j,1,n) b[i][j]=bz[i][j];F(i,1,n)F(j,1,n){if(bz[i][j]==2&&a[i][j]==c){dg(c,i,j);b[0][0]=1;}}if(b[0][0]) dfs(x+1);F(i,1,n)F(j,1,n) bz[i][j]=b[i][j];}
}
I main(){n=read();while(n){ans=-1;ok=0;mem(bz,0);F(i,1,n)F(j,1,n) a[i][j]=read();dg(a[1][1],1,1);while(1){ans++;dfs(0);if(ok) break;}printf("%d\n",ans);n=read();}return 0;
}


作者:zsjzliziyang 
QQ:1634151125 
转载及修改请注明 
本文地址:https://blog.csdn.net/zsjzliziyang/article/details/98111638

http://www.lbrq.cn/news/1461205.html

相关文章:

  • 百姓网创建不了位置交易地点/seo教程有什么
  • 江苏建设网站公司/凡科建站和华为云哪个好
  • 免费b站不收费网站2023/哈尔滨关键词优化方式
  • 网站开发笔记/问卷调查网站
  • 网站建设用什么软件/网络营销方法
  • 有哪些程序网站/百度关键词搜索量统计
  • 济南 规划 网站/seo系统源码出售
  • 电视剧下载网站 免费糖醋蒜怎样做/扬州seo
  • 国内优秀网站设计师/武汉seo报价
  • 装饰公司怎样做网站/打开百度搜索网站
  • 什么做直播网站好/广东vs北京首钢
  • 企业网站跟微信支付怎么做/阿里云免费域名
  • 常州市天宁区建设局网站/百度网盘24小时人工电话
  • 东莞网站推广流程/网站开发建站
  • 安卓app开发模板/化工seo顾问
  • 哪家网站建设公司比较好/最近几天新闻大事
  • 温州哪里有网站建设/楼市最新消息
  • wordpress 侧边栏浮动/百度小程序优化排名
  • 电子商务网站建设交印花税吗/广州营销推广
  • 网站前端用什么做/巨量千川广告投放平台
  • 求一个用css写的点击左边导航栏右边显示内容的网站/seo搜索引擎优化岗位要求
  • 贵阳做网站优化/百度关键词优化师
  • 做的网站里面显示乱码怎么解决方法/ip网站查询服务器
  • 电商网站建设包括哪些内容/百度ai助手入口
  • wordpress audio/企业seo推广
  • 做网站数据存在哪里/百度下载app下载安装
  • 关于dw做网站/贵州二级站seo整站优化排名
  • 闵行区建设和管理委员会网站/抖音seo搜索引擎优化
  • 企业集团网站建设方案/新郑网络推广外包
  • 8网站建设做网站/关键词优化排名软件
  • 有限元方法中的数值技术:三角矩阵求解
  • Java 中的 HashMap.merge() 方法详解
  • 基于深度学习的医学图像分析:使用MobileNet实现医学图像分类
  • 用Unity结合VCC更改人物模型出现的BUG
  • 【深度学习②】| DNN篇
  • 大模型结构比较