美文网首页
HDU1198(DFS算法)

HDU1198(DFS算法)

作者: Alan66 | 来源:发表于2017-05-17 22:13 被阅读0次

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

#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;
}

相关文章

  • HDU1198(DFS算法)

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

  • BFS

    [TOC] BFS 和 DFS BFS广度有限搜索和DFS深度优先搜索算法是特别常用的两种算法 DFS 算法就是回...

  • DFS算法

    DFS算法 DFS算法即:Depth First Search,深度优先搜索。这个算法的关键是解决“当下如何做”,...

  • DFS算法

    核心思想:从一个顶点V开始,沿着一条路一直走到底,如果发现不能达到目标,那就返回到上一个结点,然后从另一条路开始走...

  • 基础之全排列

    很基本的算法,使用DFS实现

  • Combination Sum II

    标签: C++ 算法 LeetCode DFS 每日算法——leetcode系列 问题 Combinatio...

  • Combination Sum

    标签: C++ 算法 LeetCode 数组 DFS 每日算法——leetcode系列 问题 Combinat...

  • (原创)BFS广度优先算法,看完这篇就够了

    BFS算法 上一篇文章讲解了DFS深度优先遍历的算法,我们说 DFS 顾名思义DEEPTH FIRET,以深度为第...

  • Algorithm进阶计划 -- 广度优先算法

    广度优先算法广度优先算法框架广度优先算法运用 1. 广度优先算法框架 DFS(Deep First Search)...

  • 岛屿问题

    岛屿系列题目的核心考点就是用 DFS/BFS 算法遍历二维数组。本文分析DFS算法。 一、框架 因为二维矩阵本质上...

网友评论

      本文标题:HDU1198(DFS算法)

      本文链接:https://www.haomeiwen.com/subject/qkjjxxtx.html