下五子棋

这个代码量

爱了吗

有没有大佬可以发一下每一题的思路,呜呜呜

#include<iostream>
using namespace std;
int g[15][15];
int dr[8]={0,0,1,-1,1,-1,1,-1};//横竖左右
int dc[8]={-1,1,0,0,1,-1,-1,1};
int flag1;
int flag2=1;
int vic;
int vis[15][15];
int fr,fc;

void dfs1(int a,int b)
{
    int rr=a,cc=b;
      while(1){
          if(flag2==4&&flag1==1){
              vic=1;
              return;
          }
        rr+=dr[0];
        cc+=dc[0];
          if(rr<1||rr>12||cc<1||cc>12)
             break;
        if(g[rr][cc]==0){
            flag1++;
            if(flag1==2){
                //不能继续搜下去了
                flag1--;
                break;
            }
            else if(flag1==1){
                fr=a;
                fc=b;//记录下第一次遇见零的位置
    
            }
        }
        else if((g[rr][cc]==g[a][b])||g[rr][cc]==g[fr][fc]){
            flag2++;
        }
        else{
              break;
          } 
          
        // cout<<flag1<<"&&"<<flag2<<"__"<<g[rr][cc]<<endl;
    }
   // cout<<"-----"<<endl;
    rr=a;cc=b;//更新起点
     while(1){
          if(flag2==4&&flag1==1){
              vic=1;
             return;
          }
          
        rr+=dr[1];
        cc+=dc[1];
          if(rr<1||rr>12||cc<1||cc>12)
             break;
        if(g[rr][cc]==0){
            flag1++;
            if(flag1==2){
                //不能继续搜下去了
                flag1--;
                break;
            }
            else if(flag1==1){
                fr=a;
                fc=b;//记录下第一次遇见零的位置
    
            }
        }
        else if((g[rr][cc]==g[a][b])||g[rr][cc]==g[fr][fc]){
            flag2++;
        }
        else{
              break;
          }   
        // cout<<flag1<<"&&"<<flag2<<"__"<<g[rr][cc]<<endl;
    }
}
void dfs2( int a,int b)
{
    int rr=a,cc=b;
      while(1){
          if(flag2==4&&flag1==1){
              vic=1;
              return;
          }
        rr+=dr[2];
        cc+=dc[2];
           if(rr<1||rr>12||cc<1||cc>12)
             break;
        if(g[rr][cc]==0){
            flag1++;
            if(flag1==2){
                //不能继续搜下去了
                flag1--;
                break;
            }
            else if(flag1==1){
                fr=a;
                fc=b;//记录下第一次遇见零的位置
    
            }
        }
        else if((g[rr][cc]==g[a][b])||g[rr][cc]==g[fr][fc]){
            flag2++;
        }
        else{
              break;
          }     
    }
     rr=a;cc=b;
     while(1){
          if(flag2==4&&flag1==1){
              vic=1;
             return;
          }
        rr+=dr[3];
        cc+=dc[3];
          if(rr<1||rr>12||cc<1||cc>12)
             break;
        if(g[rr][cc]==0){
            flag1++;
            if(flag1==2){
                //不能继续搜下去了
                flag1--;
                break;
            }
            else if(flag1==1){
                fr=a;
                fc=b;//记录下第一次遇见零的位置
    
            }
        }
        else if((g[rr][cc]==g[a][b])||g[rr][cc]==g[fr][fc]){
            flag2++;
        }
        else{
              break;
          }     
    }
}
void dfs3(int a,int b)
{
    int rr=a,cc=b;
      while(1){
          
          if(flag2==4&&flag1==1){
              vic=1;
              return;
          }
        rr+=dr[4];
        cc+=dc[4];
           if(rr<1||rr>12||cc<1||cc>12)
             break;
        if(g[rr][cc]==0){
            flag1++;
            if(flag1==2){
                //不能继续搜下去了
                flag1--;
                break;
            }
            else if(flag1==1){
                fr=a;
                fc=b;//记录下第一次遇见零的位置
    
            }
        }
        else if((g[rr][cc]==g[a][b])||g[rr][cc]==g[fr][fc]){
            flag2++;
        }
        else{
              break;
          }     
    }
     rr=a;cc=b;
     while(1){
          if(flag2==4&&flag1==1){
              vic=1;
             return;
          }
        rr+=dr[5];
        cc+=dc[5];
          if(rr<1||rr>12||cc<1||cc>12)
             break;
        if(g[rr][cc]==0){
            flag1++;
            if(flag1==2){
                //不能继续搜下去了
                flag1--;
                break;
            }
            else if(flag1==1){
                fr=a;
                fc=b;//记录下第一次遇见零的位置
    
            }
        }
        else if((g[rr][cc]==g[a][b])||g[rr][cc]==g[fr][fc]){
            flag2++;
        }
        else{
              break;
          }     
    }
}
void dfs4(int a,int b)
{
    int rr=a,cc=b;
      while(1){
          if(flag2==4&&flag1==1){
              vic=1;
              return;
          }
        rr+=dr[6];
        cc+=dc[6];
           if(rr<1||rr>12||cc<1||cc>12)
             break;
        if(g[rr][cc]==0){
            flag1++;
            if(flag1==2){
                //不能继续搜下去了
                flag1--;
                break;
            }
            else if(flag1==1){
                fr=a;
                fc=b;//记录下第一次遇见零的位置
    
            }
        }
        else if((g[rr][cc]==g[a][b])||g[rr][cc]==g[fr][fc]){
            flag2++;
        }
        else{
              break;
          }     
    }
     rr=a;cc=b;
     while(1){
          if(flag2==4&&flag1==1){
              vic=1;
             return;
          }
        rr+=dr[7];
        cc+=dc[7];
          if(rr<1||rr>12||cc<1||cc>12)
             break;
        if(g[rr][cc]==0){
            flag1++;
            if(flag1==2){
                //不能继续搜下去了
                flag1--;
                break;
            }
            else if(flag1==1){
                fr=a;
                fc=b;//记录下第一次遇见零的位置
    
            }
        }
        else if((g[rr][cc]==g[a][b])||g[rr][cc]==g[fr][fc]){
            flag2++;
        }
        else{
              break;
          }     
    }
}
int main()
{
   for(int i=1;i<=12;++i){
     for(int j=1;j<=12;++j){
         cin>>g[i][j];
     }
   }
    for(int i=1;i<=12;++i){
        for(int j=1;j<=12;++j){
            //标记数组
            if(g[i][j]==0)//不考虑0起点
                continue;
            flag1=0;flag2=1;fr=0;fc=0;
            dfs1(i,j);
          // cout<<vic<<endl;
             flag1=0;flag2=1;fr=0;fc=0;
            dfs2(i,j);
            //  cout<<vic<<endl;
             flag1=0;flag2=1;fr=0;fc=0;
            dfs3(i,j);
           //   cout<<vic<<endl;
             flag1=0;flag2=1;fr=0;fc=0;
            dfs4(i,j);
           //   cout<<vic<<endl;
            if(vic==1)
            {
                cout<<"YES";
             //   cout<<i<<"*"<<j<<endl;
                return 0;
            }
        }
    }
    cout<<"NO";
}