我只能说的亏没做,要不就挂0了。。

本来想四色定理,肯定4就可以的。。。然后准备爆,发现3的时候不好爆,又想了老一会,嗯,数据范围不小,应该不是暴力,直接找规律,貌似最大就是3,有一个3连块,输出3,其他输出2什么的。交,发现有环的时候,特殊的也是3。。。没办法还得暴力啊。暴力2的情况,写的也是各种错误。。。终于过了。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
char p[][];
int o[][];
int mp[][],pre[];
int a[] = {,,,-,,-};
int b[] = {,-,,,-,};
int num = ;
int dfs(int x,int step)
{
int i;
for(i = ;i < num;i ++)
{
if(i == x) continue;
if(mp[x][i]&&pre[x] == pre[i])
{
return ;
}
else if(mp[x][i])
{
pre[i] = step% + ;
if(dfs(i,step+) == )
return ;
}
}
return ;
}
class HexagonalBoard
{
public :
int minColors(vector <string> board)
{
int i,j,k,n,flag;
n = board[].size();
for(i = ;i < n;i ++)
{
for(j = ;j < n;j ++)
{
if(board[i][j] == 'X')
o[i][j] = num ++;
}
}
for(i = ;i < n;i ++)
{
for(j = ;j < n;j ++)
{
if(board[i][j] != 'X') continue;
if(flag == ) flag = ;
for(k = ;k < ;k ++)
{
if(i + a[k] >= &&i + a[k] < n&&j + b[k] >= &&j + b[k] < n)
{
if(board[i+a[k]][j+b[k]] == 'X')
{
flag = ;
mp[o[i][j]][o[i+a[k]][j+b[k]]] = ;
}
}
}
}
}
if(flag == )
{
for(i = ;i < num;i ++)
{
if(!pre[i])
{
pre[i] = ;
if(dfs(i,) == )
return ;
}
}
return ;
}
else if(flag == )
return ;
else
return ;
}
};

最新文章

  1. [UML]UML系列——时序图(顺序图)sequence diagram
  2. View动画和属性动画
  3. NLog的使用
  4. Linux常用命令_(安装包管理)
  5. Inno Setup入门(十)——操作注册表 &amp; 自启程序
  6. pam
  7. YII设置用户访问过滤
  8. Eclipse修改工程名字
  9. Python档案袋( Socket 与 ScoketServer 通信 )
  10. NDVI等植被相关指数
  11. 二维数组的查找(JAVA)
  12. php中static和self的区别
  13. SQL注入(dvwa环境)
  14. Haskell语言学习笔记(30)MonadCont, Cont, ContT
  15. 2014年ENVI/IDL遥感应用与开发培训班-11月重庆站 開始报名了
  16. var和let示例
  17. Oracle profile含义、修改、新增
  18. 【Foreign】光 [莫比乌斯反演]
  19. urllib2设置代理
  20. jQuery 隐藏和显示

热门文章

  1. Delphi按下F1不能出现帮助文档的解决方法
  2. Sexagenary Cycle(天干地支法表示农历年份)
  3. Code Review for SSIS package
  4. Ubuntu / Win7 安装db2 v10.5
  5. 手机WebAPP设计注意事项和解决方法
  6. C# NamePipe使用小结
  7. 跟着鸟哥学Linux系列笔记0-扫盲之概念
  8. Vector[C++]
  9. [转]svn常用命令
  10. Arduino101学习笔记(四)&mdash;&mdash; 数字IO