zoukankan      html  css  js  c++  java
  • hdu1198(模拟搜索)

    这个题目,比较恶心,思路很是简单,就是模拟的时候有些麻烦......水题

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    char s[100][100];
    int t[400][400],vist[400][400];
    int n,m;
    int p[13][3][3]={
        {
            0,1,0,
            1,1,0,
            0,0,0
        },
    
        {
            0,1,0,
            0,1,1,
            0,0,0,
        },
    
        {
            0,0,0,
            1,1,0,
            0,1,0,
        },
    
        {
            0,0,0,
            0,1,1,
            0,1,0,
        },
    
        {
            0,1,0,
            0,1,0,
            0,1,0,
        },
    
        {
            0,0,0,
            1,1,1,
            0,0,0,
        },
    
        {
            0,1,0,
            1,1,1,
            0,0,0,
        },
    
        {
            0,1,0,
            1,1,0,
            0,1,0,
        },
    
        {
            0,0,0,
            1,1,1,
            0,1,0,
        },
    
        {
            0,1,0,
            0,1,1,
            0,1,0,
        },
    
        {
            0,1,0,
            1,1,1,
            0,1,0,
        }
    };
    int fx[4][2]={1,0,-1,0,0,1,0,-1};
    void dfs(int x,int y)
    {
        for(int i=0;i<4;i++)
        {
            int mx=fx[i][0]+x;
            int my=fx[i][1]+y;
            if(0<=mx&&mx<3*n&&my>=0&&my<3*m&&!vist[mx][my]&&t[mx][my]==1)
            {
                vist[mx][my]=1;
                dfs(mx,my);
            }
        }
    }
    int main()
    {
    
        while(scanf("%d%d",&n,&m)>0)
        {
            if(n==-1&&m==-1)   break;
            for(int i=0;i<n;i++)
            scanf("%s",s[i]);
            int cnt=0;
            memset(t,0,sizeof(t));
            memset(vist,0,sizeof(vist));
            for(int i=1;i<3*n;i+=3)
            {
                //if(i%2==0)
                //continue;
                for(int j=1;j<3*m;j+=3)
                {
                    //if(j%2==0)
                    //continue;
                    int tmp=i-1;
                    int tmp1=j-1;
                    int hang=cnt/m;
                    int lie=cnt%m;
                    int x=s[hang][lie]-'A';
                    cnt++;
                    for(int r=tmp;r<=i+1;r++)
                    for(int ll=tmp1;ll<=j+1;ll++)
                    {
                        if(t[r][ll]==0)
                        t[r][ll]=p[x][r-tmp][ll-tmp1];
                    }
                }
            }
            /*for(int i=0;i<3*n;i++)
            {
                for(int j=0;j<3*m;j++)
                printf("%d",t[i][j]);
                printf("
    ");
            }*/
            int sum=0;
            for(int i=1;i<3*n;i+=3)
            {
                for(int j=1;j<3*m;j+=3)
                {
                    if(!vist[i][j]&&t[i][j]==1)
                    {
                        dfs(i,j);
                        sum++;
                    }
                }
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
    
  • 相关阅读:
    C++之类和对象
    PHP程序设计基础
    PHP函数和MySQL数据库
    HTML语言基础
    文件和目录1(文件属性和权限)
    文件IO
    查找
    使用tcpdump抓包实例
    导入模块的2种方法
    ansible启用sudo执行命令
  • 原文地址:https://www.cnblogs.com/ziyi--caolu/p/3476802.html
Copyright © 2011-2022 走看看