题目链接

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. ASP.NET CORE API Swagger+IdentityServer4授权验证

    简介 本来不想写这篇博文,但在网上找到的文章博客都没有完整配置信息,所以这里记录下. 不了解IdentityServer4的可以看看我之前写的入门博文 Swagger 官方演示地址 源码地址 配置Id ...

  2. iview组件 eslint校验出错 Parsing error: x-invalid-end-tag

    如下: 解决: 在.eslintrc.js文件中加上: rules: { // allow async-await 'generator-star-spacing': 'off', // allow ...

  3. git 第一次关联远程仓库

    1.首先需要先git pull origin master 2.然后合并两个无关的仓库 git pull origin master --allow-unrelated-histories

  4. hbase系列之:初识hbase

    一.概述 在hadoop生态圈里,hbase可谓是鼎鼎大名.江湖传言,hbase可以实现数十亿行X数百万列的实时查询,可横向扩展存储空间.如果传言为真,那得好好了解了解hbase.本文从概念上介绍hb ...

  5. VBscript.Encode 解码器

    VBscript.Encode 解码器   此解码器算法来至互联网,我只是收集然后写了个简单的页面便于大家使用. 如有何不妥之处,请留言.

  6. 让老版本IE支持HTML5

    一直想入手C3和H5,但因为所开发的项目一直要求兼容IE7,IE8.而这两个浏览器并不支持html5,所以一直都在观望而未真正的投入太多精力去学习.尽管我知道h5和c3是主流. 在最近的项目开发中,偶 ...

  7. Python练习-函数(方法)的定义和应用

    需求:对文件进行增删改查,使用函数调用的方式完成操作 # 编辑者:闫龙 import MyFuncation; Menu = ["查询","添加"," ...

  8. java 面试题总结(一)

    从网上找了些面试题,自己手工总结了理解了一下,如有理解错误,还请指正. java基础 1.String 为什么是final的?     https://www.zhihu.com/question/3 ...

  9. Memcached服务器UDP反射放大攻击

    1.前言 2月28日,Memcache服务器被曝出存在UDP反射放大攻击漏洞.攻击者可利用这个漏洞来发起大规模的DDoS攻击,从而影响网络正常运行.漏洞的形成原因为Memcache 服务器UDP 协议 ...

  10. centos 安装memcache服务后memcahce本机连接Permission

    自己手动在虚拟机下装了下memcache,整个过程真是充满波折,本身用php5.3安装memcache扩展就麻烦很多,无法通过yum直接安装,安装方法详见http://chenwei.me/blog/ ...