五子棋

来源:互联网 发布:淘宝商品评价没有了 编辑:程序博客网 时间:2024/04/29 21:26
#include <iostream>using namespace std;const int maxR=12;const int maxC=12;char s[maxR][maxC];int n,m;const int fx[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,-1,-1,1,1,-1};bool ncj(int x,int y){   return x>=0&&y>=0&&x<n&&y<m;}bool ok(int x,int y,char ch){   int xx,yy,i,j,num;   for( i=0; i<8; i+=2)   {       num=1;       xx=x+fx[i][0],yy=y+fx[i][1];       while(ncj(xx,yy)&&s[xx][yy]==ch)       {           xx+=fx[i][0];           yy+=fx[i][1];           ++num;       }       if(num>=5)return 1;       xx=x+fx[i+1][0],yy=y+fx[i+1][1];       while(ncj(xx,yy)&&s[xx][yy]==ch)       {           xx+=fx[i+1][0];           yy+=fx[i+1][1];           ++num;       }       if(num>=5)return 1;   }   return 0;}bool Win(char ch){   int i,j;   for( i=0; i<n; ++i)   {       for( j=0; j<m; ++j)       if(s[i][j]==' ')       {           if(ok(i,j,ch))return 1;       }   }   return 0;}bool judge1(){  bool flag=0;    for(int i=0;i<n;++i)        for(int j=0;j<m;++j)            if(s[i][j]==' '){            flag=1;                if(Win('0')==true)                    return false;  s[i][j]='0';                    if(Win('1')==false){                   s[i][j]=' ';                               return false;                }                s[i][j]=' ';            }    return flag;}bool judge(){    for(int i=0;i<n;++i)        for(int j=0;j<m;++j)            if(s[i][j]==' '){                if(Win('1')==true){                    return true;                }                 s[i][j]='1';                if(judge1())                    return true;                s[i][j]=' ';            }    return false;                }int main(){    while(scanf("%d%d",&n,&m)==2){        bool ok;        getchar();        for(int i=0; i<n; ++i) gets(s[i]);        ok=judge();        if(ok==true) puts("YES");        else puts("NO");    }        }

0 0
原创粉丝点击