返回题解分享
讨论 / 题解分享/ 帖子详情

小红与字符串矩阵 - 题解

DFS



#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N = 1e3 + 5;
const int INF = 0x3f3f3f3f;
char g[N][N];
int vis[N][N];
int n, m ,ans;

int dx[] = {0,0,-1,1};
int dy[] = {1,-1,0,0};

string s = "tencent";
void dfs(int x,int y,int c) {
    if(x < 1 || x > n || y < 1 || y > m) return;
    if(g[x][y] != s[c]) return;
    if(c == 6 && g[x][y] == s[6]) {
        ans++;
        return;
    }
    for(int i = 0;i < 4;i++){
        int x1 = x + dx[i];int y1 = y + dy[i];
        if(vis[x1][y1]) continue;
        vis[x1][y1] = 1;
        dfs(x1,y1,c + 1);
        vis[x1][y1] = 0;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= m;j++)
            cin >> g[i][j];
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= m;j++){
            if(g[i][j] == 't')
                dfs(i,j,0);
        }    
    }
    cout << ans << endl;
    return 0;
}
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!