题目链接

http://poj.org/problem?id=1970

思路

题目的意思是判断五子棋棋局是否有胜者,有的话输出胜者的棋子类型,并且输出五个棋子中最左上的棋子坐标;没有胜者输出0.

这道题目是floodfill延伸而来,使用dfs求解,但这道题比普通的floodfill题目又多了一些难度,比如要输出最左上棋子的坐标,我的做法是在main函数中从上到下、从左到右遍历棋盘,当位置(r, c)有棋子时,则从该位置开始dfs,加上搜索的方向为向右(r, c+1),向下(r+1, c),右下(r+1, c+1),右上(r, c-1),所以如果搜索的结果符合获胜的条件,则(r, c)就为最左上的位置。普通dfs题目标记是否搜索过时大多使用二维数据visit[i][j],在该题中,除了坐标之外,还要加上方向vist[i][j][d],表示在坐标(i, j)的d方向是否搜索过。

代码

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; const int N = 19;
int board[N+1][N+1];
int visit[N+1][N+1][4];
int dir[4][2] = {{-1, 1}, {0, 1}, {1, 1}, {1, 0}}; //方向为右上、右、右下、下
int cnt; void dfs(int r, int c, int d, int type){
visit[r][c][d] = 1;
int nr = r + dir[d][0];
int nc = c + dir[d][1]; if(nr>=0 && nr<N && nc>=0 && nc<N && board[nr][nc]==type){ //注意这里不需要条件 && !visit[nr][nc][d]
cnt++;
dfs(nr, nc, d, type);
}
} int main(){
//freopen("poj1970.txt", "r", stdin);
int t;
cin>>t;
while(t--){
memset(board, 0, sizeof(board));
memset(visit, 0, sizeof(visit));
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
scanf("%d", &board[i][j]);
}
} bool win = false;
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(board[i][j]){
int type = board[i][j];
for(int k=0; k<4; k++){
if(!visit[i][j][k]){
cnt = 1;
dfs(i, j, k, type);
if(cnt==5 && board[i-dir[k][0]][j-dir[k][1]]!=board[i][j]){ //排除6子连珠的情况
win = true;
printf("%d\n%d %d\n", type, i+1, j+1);
}
}
if(win) break;
}
}
if(win) break;
}
if(win) break;
}
if(!win){
cout<<"0"<<endl;
}
}
return 0;
}

poj1970 The Game(DFS)的更多相关文章

  1. 【POJ - 1970】The Game(dfs)

    -->The Game 直接中文 Descriptions: 判断五子棋棋局是否有胜者,有的话输出胜者的棋子类型,并且输出五个棋子中最左上的棋子坐标:没有胜者输出0.棋盘是这样的,如图 Samp ...

  2. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  3. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  4. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  5. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  6. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  7. POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)

    来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS   Memory Limit: 65536 ...

  8. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  9. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

随机推荐

  1. 51 nod 1046 A^B Mod C

    1046 A^B Mod C 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出3个正整数A B C,求A^B Mod C.   例如,3 5 8,3^ ...

  2. SQL语句(二十)—— 数据库安全性

    数据库安全性 1. SQL Server 配置管理器  => 网络配置 MSSQLSERVER 协议,如果应用程序和SQL Server 在同一机器上,仅使用 Shared Memory (共享 ...

  3. 接口测试Case之面向页面对象编写及规范

    一.什么是页面对象化 主要提倡的思想是:万物皆对象,即把一个Page看成一个对象,来进行接口自动化Case的编写,不要闲扯,直接讲怎么个操作法呢? 二.有什么优势? 2.1 Case层次清晰,便于管理 ...

  4. hbase系列之:独立模式部署hbase

    一.概述 在上一篇博文中,我简要介绍了hbase的部分基础概念,如果想初步了解hbase的理论,可以参看上一篇博文 hbase系列之:初识hbase .本博文主要介绍独立模式下部署hbase及hbas ...

  5. python学习笔记2-字符串操作

    一.字符串切片 #切片也能适合字符串 tittle='今 天 发 苹 果' for i t in enumerate(tittle): #enumerate可以同时循环下标和值 print('%s:% ...

  6. 【转】.NET+AE开发中常见几种非托管对象的释放

    尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 今天在开发时遇到一个问题:" 未处理 System.AccessViolationException Message="尝试 ...

  7. 蓝牙4.0 BLE入门

    在BLE协议中有两个角色,一个是周边(Periphery),另外一个是中央(Central).一个中央可以同时连接多个周边,但一个周边某一时刻只能连接一个中央.但是不管periphery还是centr ...

  8. 2019年湖南多校第一场||2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018)

    第一场多校就打的这么惨,只能说自己太菜了,还需继续努力啊- 题目链接: GYM链接:https://codeforces.com/gym/101933 CSU链接:http://acm.csu.edu ...

  9. 【数据库】SQL经典面试题 - 数据库查询 - 子查询应用二

    上节课我们通过子查询,完成了查询的最高分学生的需求,今天我们来学习子查询的分类,以及通过子查询来完成工作中经常遇到一些个性化需求. 子查询概念: 一个SELECT语句嵌套在另一个SELECT语句中,子 ...

  10. 关于禁用"请停用以开发者模式运行的扩展程序"提示

    有兴趣研究谷歌浏览器扩展开发,但每次开启高版本chrome都会有烦人的提示 因为我用的360急速,目前还有提示,但使用原生chrome连插件都给删了,无语