C++ 代码分析:常见问题与优化建议

#include <bits/stdc++.h>
using namespace std;
int m, n, cnt = 0, maxc = -1;
char Map[128][128] = {};

void dfs(int x, int y);
int main(){
    scanf("%d %d", &m, &n);

    for(int i = 0; i < m; ++i)
        for(int j = 0; j < n; ++j)
            cin >> Map[i][j];

    for(int i = 0; i < m; ++i){
        for(int j = 0; j < n; ++j){
            if(Map[i][j] == '1'){
                cnt = 0;
                dfs(i, j);
                maxc = max(cnt, maxc);
            }
        }
    }
    cout << maxc;
    return 0;
}

void dfs(int x, int y){
    ++cnt;
    Map[x][y] = '!';
    if(x-1 >= 0 && Map[x-1][y] == '1')
        dfs(x-1, y);
    if(x+1 < m && Map[x+1][y] == '1')
        dfs(x+1, y);
    if(y-1 >= 0 && Map[x][y-1] == '1')
        dfs(x, y-1);
    if(y+1 < n && Map[x][y+1] == '1')
        dfs(x, y+1);
}

这份代码看起来没有语法错误,但是可能存在以下几个问题:

  1. 输入格式不清楚: 代码使用了 cin 进行输入,但是却没有设置输入格式。如果输入的数据中有空格,使用 cin 将只读入一个单词,而不是整个字符串。应该使用 getline 或者设置 cin 的格式来避免这个问题。

  2. 缺少边界判断: 在进行 dfs 时,没有判断当前位置是否越界。这可能会导致程序崩溃或者得到错误的结果。应该在 dfs 的前面加上边界判断的代码。

  3. 变量名不够明确: 代码中的变量名 mn 可能不够明确,不容易看出来它们分别代表什么意思。应该使用更加明确的变量名来提高代码的可读性。

  4. 变量作用域问题: 代码中使用了全局变量,这可能会导致变量的作用域变得不清晰。在不必要的情况下,应该尽量避免使用全局变量。

  5. 变量初始化问题: 代码中的变量 cntmaxc 没有进行初始化,这可能会导致程序得到错误的结果。应该在定义变量时进行初始化。

优化建议:

  1. 使用 getline 或设置 cin 格式来读取包含空格的输入。

  2. dfs 函数开始前,添加边界判断代码。

  3. 将变量名 mn 改为 rowscols,以提高代码的可读性。

  4. 将全局变量 cntmaxc 改为局部变量,并将其定义在 main 函数或 dfs 函数中,以控制变量的作用域。

  5. 在定义变量时进行初始化。

修改后的代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int rows, cols;
    scanf("%d %d", &rows, &cols);
    char Map[128][128] = {};

    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            cin >> Map[i][j];
        }
    }

    int maxCount = -1;

    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            if (Map[i][j] == '1') {
                int count = 0;
                dfs(i, j, Map, rows, cols, count);
                maxCount = max(count, maxCount);
            }
        }
    }

    cout << maxCount << endl;
    return 0;
}

void dfs(int x, int y, char Map[][128], int rows, int cols, int& count) {
    ++count;
    Map[x][y] = '!';

    if (x - 1 >= 0 && Map[x - 1][y] == '1') {
        dfs(x - 1, y, Map, rows, cols, count);
    }
    if (x + 1 < rows && Map[x + 1][y] == '1') {
        dfs(x + 1, y, Map, rows, cols, count);
    }
    if (y - 1 >= 0 && Map[x][y - 1] == '1') {
        dfs(x, y - 1, Map, rows, cols, count);
    }
    if (y + 1 < cols && Map[x][y + 1] == '1') {
        dfs(x, y + 1, Map, rows, cols, count);
    }
}

注意: 以上代码示例仅供参考,实际应用中可能需要根据具体的场景进行调整。

C++ 代码分析:常见问题与优化建议

原文地址: https://www.cveoy.top/t/topic/oXKe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录