• PKU3316


    这题陷阱很多....很多种不合法的贪食蛇...要仔细排除每种情况..

    #include<stdio.h>
    #include
    <string.h>

    struct P
    {
        
    int i, j;
    }
    ;
    int n, m;
    bool graph[201][201];
    bool v[201][201];
    int cnt;
    bool is;
    P head, tail;

    bool ishead(int i, int j)
    {
        
    int c=0;
        
    if(i-1>=0 && graph[i-1][j]==1)
            c
    ++;
        
    if(j-1>=0 && graph[i][j-1]==1)
            c
    ++;
        
    if(i+1<&& graph[i+1][j]==1)
            c
    ++;
          
    if(j+1<&& graph[i][j+1]==1)
            c
    ++;
        
    if(c==1 || c==0)
            
    return 1;
        
    else
            
    return 0;
    }


    void DFS(int i, int j)
    {
        
    int c=0;
        v[i][j]
    =1;
        
    if(i-1>=0 && graph[i-1][j]==1)
            c
    ++;
        
    if(j-1>=0 && graph[i][j-1]==1)
            c
    ++;
        
    if(i+1<&& graph[i+1][j]==1)
            c
    ++;
          
    if(j+1<&& graph[i][j+1]==1)
            c
    ++;
        
    if(c>2)
            
    is=0;
        
    int cc=0;
        
    if(i-1>=0 && graph[i-1][j]==1 && !v[i-1][j])
        
    {
            DFS(i
    -1,j);
            cc
    ++;
        }

        
    if(j-1>=0 && graph[i][j-1]==1 && !v[i][j-1])
        
    {
            DFS(i,j
    -1);
            cc
    ++;
        }

        
    if(i+1<&& graph[i+1][j]==1 && !v[i+1][j])
        
    {
            DFS(i
    +1,j);
            cc
    ++;
        }

        
    if(j+1<&& graph[i][j+1]==1 && !v[i][j+1])
        
    {
            DFS(i,j
    +1);
            cc
    ++;
        }

        
    if(cc==0)tail.i=i,tail.j=j;



            
    }


    bool b(int i, int j)
    {
        
    int c=0;
        
    if(i-1<0)c++;
        
    if(j-1<0)c++;
        
    if(i+1==n)c++;
        
    if(j+1==m)c++;
        
    if(i-1>=0 && graph[i-1][j]==0)
            c
    ++;
        
    if(j-1>=0 && graph[i][j-1]==0)
            c
    ++;
        
    if(i+1<&& graph[i+1][j]==0)
            c
    ++;
          
    if(j+1<&& graph[i][j+1]==0)
            c
    ++;
        
    if(c==3)
            
    return 1;
        
    else
            
    return 0;
    }


    bool bord(P p)
    {
        
    int i=p.i, j=p.j;
        
    int c=0;
        
    if(i-1>=0 && graph[i-1][j]==0 && b(i-1,j))
            
    return 1;    
        
    else
        
    if(j-1>=0 && graph[i][j-1]==0 && b(i,j-1))
            
    return 1;
        
    else
        
    if(i+1<&& graph[i+1][j]==0 && b(i+1,j))
            
    return 1;
        
    else
          
    if(j+1<&& graph[i][j+1]==0 && b(i,j+1))
            
    return 1;
        
    else
            
    return 0;
    }


    int main()
    {

        
    while(scanf("%d%d",&n,&m)==2)
        
    {
            
    if(n==0 && m==0)break;
            cnt
    =0;
            memset(v,
    0,sizeof(v));
            
    int i, j;
            
    char c;
            
    for(i = 0; i < n; i++)
                
    for(j = 0; j < m; j++)
                
    {
                    scanf(
    "\n%c"&c);
                    
    if(c=='1')graph[i][j]=1;
                    
    else graph[i][j]=0;
                }


            
    for(i = 0; i < n; i++)
                
    for(j = 0 ;j < m; j++)
                    
    if(graph[i][j] && !v[i][j] && ishead(i,j))
                    
    {
                        
    is=1;
                        head.i
    =i, head.j=j;
                        DFS(i, j);
                        
    if(is && !bord(head) && !bord(tail))
                        
    {
                        
    //    printf("%d %d   :  %d %d \n",head.i,head.j,tail.i,tail.j);
                            cnt++;
                        }

                    }


            printf(
    "%d\n", cnt);
        }

        
    return 0;
    }
  • 相关阅读:
    java 8 lambda函数
    java nio和io
    jetty xml解析
    使用spring框架时,使用xml还是注解
    tcp/ip基础知识
    http的session和cookie
    html相关
    form之action的绝对路径与相对路径(转载)
    MariaDB 10 (MySQL DB) 多主复制并实现读写分离
    牛刀小试MySQL学习—MySQL 双主
  • 原文地址:https://www.cnblogs.com/SQL/p/914845.html
Copyright © 2020-2023  润新知