HDU1198(DFS算法)

这个题需要注意细节,不然卡在那儿很烦,我的做法比较无脑,代码太长,但理解方便一点。

#include<cstdio>
#include<cstring>
char grid[1005][1005];
int m,n;
int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};//分别表示上下左右四个方向
//为1表示这个方向有接口,为0表示这个方向没有接口
/*int type[11][4]={{1,1,0,0},{0,1,1,0},
                 {1,0,0,1},{0,0,1,1},
                 {0,1,0,1},{1,0,1,0},
                 {1,1,1,0},{1,1,0,1},
                 {1,0,1,1},{0,1,1,1},
                 {1,1,1,1}};
这里面可以简化下面的自己赋值,但还不会用*/
int dfs(int x,int y)
{
    if(grid[x][y]=='*')
        grid[x][y]='!';
    else
        return 0;
    for(int i=0;i<4;i++)
    {
        int xx=x+dir[i][0];
        int yy=y+dir[i][1];
        if(xx>=0&&xx<3*m&&yy>=0&&yy<3*n)        //注意范围
            dfs(xx,yy);
    }
    return 1;
}

int main()
{
    while(scanf("%d%d",&m,&n)==2&&m!=-1&&n!=-1)
    {
        memset(grid,0,sizeof(grid));
        int cunt=0;
        char cnt;
        for(int i=0;i<m;i++)
        {
            getchar();
            for(int j=0;j<n;j++)
          {
            scanf("%c",&cnt);
            if(cnt=='A')
            {
                grid[i*3][j*3+1]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+1][j*3]='*';
            }
            if(cnt=='B')
            {
                grid[i*3][j*3+1]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+1][j*3+2]='*';
            }
           if(cnt=='C')
           {
                grid[i*3+2][j*3+1]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+1][j*3]='*';
           }
           if(cnt=='D')
           {
                grid[i*3+2][j*3+1]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+1][j*3+2]='*';
           }
           if(cnt=='E')
           {
                grid[i*3][j*3+1]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+2][j*3+1]='*';
           }
           if(cnt=='F')
           {
                grid[i*3+1][j*3]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+1][j*3+2]='*';
           }
           if(cnt=='G')
           {
                grid[i*3+1][j*3]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+1][j*3+2]='*';
                grid[i*3][j*3+1]='*';
           }
           if(cnt=='H')
           {
                grid[i*3+2][j*3+1]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3][j*3+1]='*';
                grid[i*3+1][j*3]='*';
           }
           if(cnt=='I')
           {
                grid[i*3+1][j*3]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+1][j*3+2]='*';
                grid[i*3+2][j*3+1]='*';
           }
           if(cnt=='J')
           {
                grid[i*3][j*3+1]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+1][j*3+2]='*';
                grid[i*3+2][j*3+1]='*';
           }
           if(cnt=='K')
           {
                grid[i*3][j*3+1]='*';
                grid[i*3+1][j*3]='*';
                grid[i*3+1][j*3+1]='*';
                grid[i*3+1][j*3+2]='*';
                grid[i*3+2][j*3+1]='*';
           }
        }
        }
        for(int i=0;i<m*3;i++)          //注意循环的范围
            for(int j=0;j<n*3;j++)
                if(dfs(i,j))            //先进入DFS算法再判断是否可行
                    ++cunt;
        printf("%d\n",cunt);
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,473评论 25 709
  • 今年的7月不同往年,今年我们干了一件大事 7.19日我们来到了物花天宝,人杰地灵,名人辈出,书院遍布,也是中国现代...
    楊思齊阅读 3,749评论 1 1
  • 你对过去满意吗? 你是否为没有达成目标而烦恼? 你是否心里感觉有很大的压力? 你是否感觉到对现在非常迷茫? 你是否...
    鹿北111阅读 2,812评论 0 0
  • 中国人习惯在除夕夜全家人围着电视观看中央电视台播出的春节晚会。现代日本人不过旧历年,但在阳历新年前夜,即12月31...
    animesama阅读 9,080评论 2 17

友情链接更多精彩内容