754B Ilya and tic-tac-toe game

来源:互联网 发布:无损播放软件 编辑:程序博客网 时间:2024/06/05 08:55

题目链接:

http://codeforces.com/problemset/problem/754/B

题解:

感觉这题直接用暴力去做(虽然自己比较傻的用了BFS做)

代码:

#include <cmath>#include <cstdio>#include <queue>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define met(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3ftypedef long long ll;int dir[8][2]={1,0,-1,0,0,1,0,-1,1,1,1,-1,-1,1,-1,-1};struct node{    int x,y;};int visited[4][4];char map[4][4];int flag;bool go(int x,int y){    if(0<=x&&x<4&&0<=y&&y<4&&(map[x][y]=='.'||map[x][y]=='x'))       return true;    return false;}void bfs(int x,int y){    node  now,next;    queue<node>q;    while(!q.empty())        q.pop();    met(visited,0);    now.x=x;    now.y=y;    visited[x][y]=1;    q.push(now);    while(!q.empty())    {        now=q.front();        q.pop();        for(int i=0;i<8;i++)        {            next.x=now.x+dir[i][0];            next.y=now.y+dir[i][1];            int cnt1=1;            int cnt2=0;            if(map[now.x][now.y]=='x')                cnt2=1;            if(!visited[next.x][next.y]&&go(next.x,next.y))            {                visited[next.x][next.y]=1;                q.push(next);            }            while(go(next.x,next.y))            {                cnt1++;                if(map[next.x][next.y]=='x')                    cnt2++;                if(cnt1==3&&cnt2>=2)                {                    printf("YES\n");                    flag=1;                    return;                }                next.x+=dir[i][0];                next.y+=dir[i][1];            }        }    }}int main(){    for(int i=0;i<4;i++)        scanf("%s",map[i]);    flag=0;    for(int i=0;i<4;i++)        for(int j=0;j<4;j++)            if(!flag&&(map[i][j]=='x'||map[i][j]=='.'))               bfs(i,j);    if(!flag)        printf("NO\n");}
0 0
原创粉丝点击