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;
    }
    
  • 相关阅读:
    回顾初心
    团队作业6(代码复审+事后诸葛亮)
    Alpha阶段项目复审(鸽牌开发小分队)
    事后诸葛亮(鸽牌开发小分队)
    团队作业5
    第七篇Scrum冲刺博客
    第六篇Scrum冲刺博客
    第五篇Scrum冲刺博客
    第四篇Scrum冲刺博客
    第三篇Scrum冲刺博客
  • 原文地址:https://www.cnblogs.com/ziyi--caolu/p/3476802.html
Copyright © 2011-2022 走看看