c++编程,求大神帮忙解答

急急急!!!!真的很急真的很急真的很急

C++代码如下:

#include <bits/stdc++.h> // C++万能头文件

using namespace std;


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

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

int n, m;

char mat[3000][3000]; // 字符矩阵

int dp[3000][3000][6]; // 记忆化搜索

string s = "IAKCSP";


int dfs(int x, int y, int i) { // 当前位置出发,可以匹配s[i:5]的个数

    if (i == 5)

        return dp[x][y][i] = 1; // 匹配到结尾,返回1个可行解

    if (dp[x][y][i] != -1)

        return dp[x][y][i];

    dp[x][y][i] = 0;

    for (int k = 0; k < 4; ++k) {

        int nx = x + dx[k], ny = y + dy[k];

        if (nx >= 0 && nx < n && ny >= 0 && ny < m

            && mat[nx][ny] == s[i + 1])

                dp[x][y][i] += dfs(nx, ny, i + 1);

    }

    return dp[x][y][i];

}


int main() {

    memset(dp, -1, sizeof(dp)); // 初始化为-1

    cin >> n >> m;

    for (int i = 0; i < n; ++i) {

        for (int j = 0; j < m; ++j)

            cin >> mat[i][j];

    }

    int ans = 0;

    for (int i = 0; i < n; ++i) {

        for (int j = 0; j < m; ++j)

            if (mat[i][j] == s[0])

                ans += dfs(i, j, 0);

    }

    cout << ans << "\n";

    return 0;

}

g++编译通过,且通过测试用例,望采纳~

温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜