HDU 5706 暴力dfs

来源:互联网 发布:淘宝导航条颜色表 编辑:程序博客网 时间:2024/06/05 07:31

题目链接:HDOJ 5706





题意:给定字符矩阵,每一处可向四个方向组单词,求能够组成"girl"和"cat"的单词数。



AC code:

#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define debug 1const int maxn = 1000 + 5;char data[maxn][maxn];int  n, m, ans1, ans2;int dir[][2] = {{1, 0}, {-1, 0}, {0, 1},  {0, -1}};bool judge(int x, int y){//边界判断 if(x < 1 || x > n || y < 1 || y > m)return false;return true;}void dfs1(int x, int y){for(int i = 0; i < 4; i++){int fx = x + dir[i][0];int fy = y + dir[i][1];if(judge(fx, fy)){if(data[x][y] == 'g' && data[fx][fy] == 'i'){dfs1(fx, fy);}if(data[x][y] == 'i' && data[fx][fy] == 'r'){dfs1(fx, fy);}if(data[x][y] == 'r' && data[fx][fy] == 'l'){ans1++;}}}}void dfs2(int x, int y){for(int i = 0; i < 4; i++){int fx = x + dir[i][0];int fy = y + dir[i][1];if(judge(fx, fy)){if(data[x][y] == 'c' && data[fx][fy] == 'a'){dfs2(fx, fy);}if(data[x][y] == 'a' && data[fx][fy] == 't'){ans2++;}}}}int main(){    freopen("in.txt", "r", stdin);    int T;    scanf("%d", &T);    char a;    while(T--)    {        ans1 = ans2 = 0;        scanf("%d%d", &n, &m);        for(int i = 1; i <= n; i++)            for(int j = 1; j <= m; j++)            {                while((a = getchar()) == ' ' || a == '\n');                data[i][j]  = a;            }        for(int i = 1; i <= n; i++)            for(int j = 1; j <= m; j++)            {                if(data[i][j] == 'g')               //girl                 {dfs1(i, j);                }                if(data[i][j] == 'c')//cat {dfs2(i, j);}            }printf("%d %d\n", ans1, ans2);    }    return 0;}






0 0