poj 1414 dfs 搜索
来源:互联网 发布:淘宝个人网店怎么注册 编辑:程序博客网 时间:2024/06/07 06:56
给一个正三角形, 可以在任意一个 0 的地方填上数字 c ,填完之后计算出得分的最大值。
计算得分的规则:
相同数字的连通的集合 如果和某个0连通,就忽略了。
如果没有和0连通,分2种情况: 如果这个数字是c 则得分减去 这个集合中数字的个数,否则加上。
#include<cstdio>#include<cstring>#define MAX(x,y) ((x)>(y)?(x):(y))int mov[6][2]={{0,-1},{0,1},{-1,-1},{-1,0},{1,0},{1,1}};int flag,n,c,vis[11][11],d[20][20],res;int ok(int x,int y){if(x>=1&&x<=n&&y>=1&&y<=x)return 1;elsereturn 0;}int dfs(int x,int y,int sym) // 计算 数字sym连通集合中该数字的个数{vis[x][y]=1;int step=1;for(int i=0;i<6;i++){int x1=x+mov[i][0];int y1=y+mov[i][1];if(ok(x1,y1)&&!vis[x1][y1]){if(d[x1][y1]==sym)step+=dfs(x1,y1,sym);if(d[x1][y1]==0)flag=1;}}return step;}void solve(){res=-10000;for(int i=1;i<=n;i++)//枚举每一个可以放c的地方for(int j=1;j<=i;j++){if(d[i][j]==0){int ans=0,tem;d[i][j]=c;memset(vis,0,sizeof(vis));for(int k=1;k<=n;k++)for(int p=1;p<=k;p++){if(vis[k][p]||d[k][p]==0)continue;flag=0;tem=dfs(k,p,d[k][p]);if(!flag){if(d[k][p]==c)ans-=tem;elseans+=tem;}}d[i][j]=0;res=MAX(res,ans);}}}int main(){while(~scanf("%d%d",&n,&c)&&(n+c)){for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)scanf("%d",&d[i][j]);solve();printf("%d\n",res);}}
0 0
- poj 1414 dfs 搜索
- poj 1471 dfs 搜索三角形
- POJ 1190 生日蛋糕 搜索dfs
- poj 2386 DFS搜索基础
- POJ 1014 Dividing DFS搜索
- poj 3083 搜索 DFS,BFS
- POJ 1950 Dessert DFS 搜索
- POJ 1011-Sticks 简单搜索DFS
- POJ 1321-棋盘问题 简单搜索DFS
- ACM-POJ 1562 DFS 深度优先搜索
- ACM-POJ 1979 DFS 深度优先搜索
- POJ 1664 数苹果(dfs搜索)
- POJ 1088 滑雪 DFS 记忆化搜索
- poj 1088 DFS+记忆化搜索
- POJ 1088 滑雪 DFS 记忆化搜索
- poj 1753 Flip Game(搜索:DFS+水题)
- poj 1088 滑雪 【记忆化搜索】+【DFS】
- poj 3414 dfs 广度优先搜索
- Linux下防火墙设置
- html5 nodejs&websocket聊天demo
- 面向对象高级特性
- 浅谈前端集成解决方案
- 界面手势滑动工具类
- poj 1414 dfs 搜索
- python爬取豆瓣电影Top250
- Vijos 1012 清帝之惑之雍正
- 多线程辅助类之数组(二)
- Linux下iscsi的配置与使用
- 数据库的帮助类以及DAO层代码
- navicat连接linux系统中mysql-错误:10038
- oracle条件不等于字符bug
- Coframe及NUI的样式在哪里改