HDU5546
2016-05-19 17:54
162 查看
Problem: Ancient Go
Source: The 2015 China Collegiate Programming Contest
Description: 两个人下围棋,现在问你黑棋方下一步能不能吃掉至少一个白棋。
Solution: 我们先用DFS求出每个连通块。然后只需关注每个连通块外是否有少于或等于1个的空白位置。如果有,那么黑棋下一步直接就把自己的棋子放到该位置就能吃掉这个连通块。对这个题就是个模拟题。
Code(C++):
Source: The 2015 China Collegiate Programming Contest
Description: 两个人下围棋,现在问你黑棋方下一步能不能吃掉至少一个白棋。
Solution: 我们先用DFS求出每个连通块。然后只需关注每个连通块外是否有少于或等于1个的空白位置。如果有,那么黑棋下一步直接就把自己的棋子放到该位置就能吃掉这个连通块。对这个题就是个模拟题。
Code(C++):
#include <stdio.h> #include <string.h> const int M=15; const int E=9; const int F=4; const int dirx[]={0,0,1,-1}; const int diry[]={1,-1,0,0}; char map[M][M]; bool used[M][M]; int belong[M][M]; int num[E*E+5]; bool is_count[M][M][E*E+5]; int top; void dfs(int x,int y,int top) { used[x][y]=true; belong[x][y]=top; for(int i=0;i<F;i++){ int tx=x+dirx[i]; int ty=y+diry[i]; if(tx>=1&&tx<=E&&ty>=1&&ty<=E&& map[tx][ty]=='o'&&!used[tx][ty]) dfs(tx,ty,top); } } int main() { int N,K=1; for(scanf("%d",&N);N--;){ memset(map,0,sizeof(map)); memset(used,false,sizeof(used)); memset(belong,0,sizeof(belong)); memset(num,0,sizeof(num)); memset(is_count,false,sizeof(is_count)); char str[M]; for(int i=1;i<=E;i++){ scanf("%s",str+1); for(int j=1;j<=E;j++) map[i][j]=str[j]; } top=0; for(int i=1;i<=E;i++) for(int j=1;j<=E;j++) if(map[i][j]=='o'&&!used[i][j]){ ++top; dfs(i,j,top); } for(int i=1;i<=E;i++) for(int j=1;j<=E;j++) if(belong[i][j]) for(int k=0;k<F;k++){ int tx=i+dirx[k]; int ty=j+diry[k]; if((tx>=1&&tx<=E&&ty>=1&&ty<=E)&& (belong[i][j]!=belong[tx][ty]&& map[tx][ty]=='.'&&!is_count[tx][ty][belong[i][j]])) ++num[belong[i][j]], is_count[tx][ty][belong[i][j]]=true; } bool flag=true; for(int i=1;i<=top;i++) if(num[i]<=1){ flag=false; break; } printf("Case #%d: ",K++); puts(flag? "Can not kill in one move!!!":"Can kill in one move!!!"); } return 0; }
相关文章推荐
- Java ConcurrentModificationException异常原因和解决方法
- java自定义标签的简单例子
- Mysql学习总结(18)——Mysql主从架构的复制原理及配置详解
- Nginx 关于 Rewrite 执行顺序详解
- Mysql学习总结(18)——Mysql主从架构的复制原理及配置详解
- 线段树经典题(3.0版)
- poj 1088 滑雪(记忆化搜索/动态规划)
- linux python工具pip和 easy_install的安装
- 转换为16进制
- 比较数的大小(冒泡法)
- opencv
- Dubbo测试
- 大数据量时Mysql的优化要点
- 【java】:java从零开始学1:环境配置
- 欢迎使用CSDN-markdown编辑器
- 00000
- 事件响应链,点击屏幕时是如何互动的,事件的传递
- 在eclipse中使用Lombok
- 64位linux下inet_ntop()返回值竟然为int,printf报段错误
- iphone app为什么会被打回来的一些情况,如何制止?