[POJ]1970 The Game (DFS搜八连通的连通块)
来源:互联网 发布:淘宝网夏季中年女装 编辑:程序博客网 时间:2024/06/04 08:23
题目链接:http://poj.org/problem?id=1970
题目大意:给定一个19*19的五子棋盘,(1和2表示两种棋子,0表示空位置),判定当前1和2哪个获胜,并输出5子连通的最左最上的位置坐标
数据范围:19*19棋盘
题目解答:DFS搜八连通的连通块(复杂度:O(极限情况是19*19*19))
注意:1.必须严格的5子连通,多于5子连通的不算赢,因此判出5子连通之后还需要特判,前一个棋子子是否与当前位置的棋子相同
2.由于要找最左最上的位置,所以每个棋子只需要判断“右上”、“右”、“右下”、“下”,四个方向
#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;const int maxn = 30;int g[maxn][maxn];int dx[] = {1, 0, 1, -1};int dy[] = {0, 1, 1, 1};int c;inline bool check(int x, int y){ return x >= 0 && x < 19 & y >= 0 & y < 19;}int dfs(int x, int y, int d){ int sum = 1, xx, yy; xx = x+dx[d]; yy = y+dy[d]; if(check(xx, yy) && g[xx][yy] == c) { sum += dfs(xx, yy, d); } return sum;}int main(){ int t; scanf("%d", &t); while(t--) { for(int i = 0; i < 19; ++i) { for(int j = 0; j < 19; ++j) { scanf("%d", &g[i][j]); } } int ans; int flag = 0; int x, y; for(int i = 0; i < 19 && !flag; ++i) { for(int j = 0; j < 19 && !flag; ++j) { if(!g[i][j]) continue; if(g[i][j] == 1 && !flag) { c = 1; for(int k = 0; k < 4 && !flag; ++k) { ans = dfs(i, j, k); int xx = i-dx[k]; int yy = j-dy[k]; if(ans == 5 && (!check(xx, yy) || g[xx][yy] != c)) { x = i, y = j; flag = 1; } } } if(g[i][j] == 2 && !flag) { c = 2; for(int k = 0; k < 4 && !flag; ++k) { ans = dfs(i, j, k); int xx = i-dx[k]; int yy = j-dy[k]; if(ans == 5 && (!check(xx, yy) || g[xx][yy] != c)) { x = i, y = j; flag = 2; } } } } } printf("%d\n", flag); if(flag)printf("%d %d\n", x+1, y+1); } return 0;}
0 0
- [POJ]1970 The Game (DFS搜八连通的连通块)
- [POJ]1979 Red and Black (DFS搜四连通的连通块)
- dfs求连通块(围棋 poj)
- POJ 1562 Oil Deposits(DFS,八连通,连通分量)
- HDOJ1241 Oil Deposits(DFS,八连通块)
- POJ2386 Lake Counting(DFS,八连通块)
- POJ 2386(DFS求连通块的经典算法)
- poj 1111 dfs(求连通块周长)
- POJ 2386(DFS 求连通块数量)
- POJ 2386 Lake Counting(水淹菜地,DFS,八连通,连通分量)
- POJ 1111 Image Perimeters(dfs+求连通块的周长)
- hdu1241(dfs连通块)
- dfs连通块2
- POJ 3620 Avoid The Lakes(连通分量,DFS)
- HDU1241(DFS求连通块)
- POJ 题目SPF(求割点,分成的连通块)
- poj 2117(统计连通块的个数)
- 图 dfs遍历连通块
- java复习之I/O流
- Spring学习总结(一)
- NOIP2016提高A组五校联考2总结
- 405. Convert a Number to Hexadecimal
- Android小项目之学生管理系统(附源码)
- [POJ]1970 The Game (DFS搜八连通的连通块)
- n皇后问题
- U-boot2010代码框架
- 【AC自动机】目录
- 信息流zt_使用json参数拼接sql语句
- 剑指offer:从1到n整数中1出现的次数(java)
- 大数据平台架构收集和整理
- hdu5914 构造
- 计算逆矩阵