调得我快死了啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!


先自己写了几发,老是 T,然后去看题解,大体思路居然都差不多,估计是自己写挂了orz。

几乎所有题解都有个vis数组,真 nm 看不懂到底是什么意思啊啊啊!!!

然后照着题解打了一遍后好像明白了……emmm……

vis为 1 时代表当前位置与 (0,0) 颜色相同并且联通,等于 2 时代表与 (0,0) 颜色不同但修改颜色时可能会变得联通(即和值为一的位置相邻)。

每次选择一个当前值等于 2 的位置(即这个位置可扩展连通块),以它为中心求一下vis数组,这样很巧妙地避免了从 (0,0) 重新染色。

这么妙啊……这个vis数组还真没想到……

#include <bits/stdc++.h>
using namespace std; const int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
int n,a[8][8],cpy[50][8][8],vis[8][8]; void paint(int x,int y,int c)
{
vis[x][y]=1;
for(int i=0;i<4;++i)
{
int nx=x+dx[i],ny=y+dy[i];
if(nx<0||ny<0||nx>=n||ny>=n) continue;
if(vis[nx][ny]==1) continue;
vis[nx][ny]=2;
if(a[nx][ny]==c) paint(nx,ny,c);
}
} int f()
{
int ans=0;
static bool cnt[6];
memset(cnt,0,sizeof(cnt));
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
if(!cnt[a[i][j]]&&vis[i][j]!=1)
cnt[a[i][j]]=1,++ans;
return ans;
} bool dfs(int dep,int max_dep)
{
int t=f();
if(dep+t>max_dep) return 0;
if(!t) return 1;
memcpy(cpy[dep],vis,sizeof(vis));
for(int i=0;i<6;++i)
{
bool fl=0;
for(int x=0;x<n;++x)
for(int y=0;y<n;++y)
if(a[x][y]==i&&vis[x][y]==2)
{
fl=1;paint(x,y,i);
}
if(fl&&dfs(dep+1,max_dep)) return 1;
memcpy(vis,cpy[dep],sizeof(vis));
}
return 0;
} int main()
{
while(scanf("%d",&n)&&n)
{
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
scanf("%d",&a[i][j]);
memset(vis,0,sizeof(vis));
paint(0,0,a[0][0]);
int dep=0;
while(!dfs(0,dep)) ++dep;
printf("%d\n",dep);
}
return 0;
}

最新文章

  1. Anyconnect的VPN环境部署(2)-在Linux客户机上连接Anyconnect
  2. C语言函数sscanf()的用法
  3. 配置PhoneGap 到iOS
  4. HDOJ2002计算球体积
  5. wifidog编译到openwrt
  6. HW3.5
  7. random随机函数
  8. Jsoup库 解析DOM文档
  9. jquery height、innerHeight、outHeight
  10. velocity 字符串 转化为数字
  11. Vi/VIM键盘图, Vi/vim学习图
  12. mongodb type it for more
  13. Javascript使用克隆的原型模式
  14. php数组根据某一个键值,把相同键值的合并生成一个新的二维数组
  15. eclipse更新time out的问题
  16. luogu5024 [NOIp2018]保卫王国 (动态dp)
  17. YSLOW(一款实用的网站性能检测工具)
  18. checkbox jquery操作总结
  19. yum安装下的nginx,如何添加模块,和添加第三方模块
  20. echart参数设置——曲线图

热门文章

  1. Spring Aop的执行顺序
  2. MySQL 全文索引实现一个简单版搜索引擎
  3. 【TCP/IP】TCP服务器并发处理&amp;源码
  4. Hadoop - 彻底解决警告:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
  5. QPainter::begin: Paint device returned engine == 0, type: 1
  6. 7.2、compute节点配置
  7. 揭开Docker的面纱
  8. linux之软连接 硬链接 link ln
  9. Lua表达式
  10. Selenium 自动化测试中对页面元素的value比较验证 java语言