hdu 5546 Ancient Go(2016ccpc) 暴力DFS

来源:互联网 发布:淘宝包包拍摄技巧 编辑:程序博客网 时间:2024/06/05 17:35

传送门:[hdu 5546 Ancient Got](http://acm.hdu.edu.cn/showproblem.php?pid=5884

解题思路

先找到对方的棋子也就是’o’点,然后判断对方点旁边的’.’是不是大于1如果大于1是肯定不行的,否则就是正确的!

AC代码

#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MX = 15;char maze[MX][MX];bool vis[MX][MX];int dirX[] = {0,0,1,-1};int dirY[] = {1,-1,0,0};int ret;void DFS(int r,int c){    vis[r][c] = true;    for(int i=0;i<4;i++) {        int xx = r + dirX[i];        int yy = c + dirY[i];        if(xx<0||xx>8||yy<0||yy>8||vis[xx][yy]||maze[xx][yy]=='x') continue;        if(maze[xx][yy]=='.') {            vis[xx][yy]  = true;            ret++;            continue;        }        DFS(xx,yy);    }}bool solve(){    for(int i=0;i<=8;i++) {        for(int j=0;j<=8;j++) {            if(maze[i][j]=='o') {                ret  = 0;                memset(vis,false,sizeof vis);                DFS(i,j);                if(ret<2) return true;            }        }    }    return false;}int main(void){    int T;//freopen("in.txt","r",stdin);    cin>>T;    for(int cas=1;cas<=T;cas++)    {        for(int i=0;i<=8;i++) scanf("%s",maze[i]);        printf("Case #%d: %s\n",cas,solve()?"Can kill in one move!!!":"Can not kill in one move!!!");    }}
0 0