C++ 代码分析:常见问题与优化建议
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);
}
这份代码看起来没有语法错误,但是可能存在以下几个问题:
-
输入格式不清楚: 代码使用了
cin进行输入,但是却没有设置输入格式。如果输入的数据中有空格,使用cin将只读入一个单词,而不是整个字符串。应该使用getline或者设置cin的格式来避免这个问题。 -
缺少边界判断: 在进行 dfs 时,没有判断当前位置是否越界。这可能会导致程序崩溃或者得到错误的结果。应该在 dfs 的前面加上边界判断的代码。
-
变量名不够明确: 代码中的变量名
m和n可能不够明确,不容易看出来它们分别代表什么意思。应该使用更加明确的变量名来提高代码的可读性。 -
变量作用域问题: 代码中使用了全局变量,这可能会导致变量的作用域变得不清晰。在不必要的情况下,应该尽量避免使用全局变量。
-
变量初始化问题: 代码中的变量
cnt和maxc没有进行初始化,这可能会导致程序得到错误的结果。应该在定义变量时进行初始化。
优化建议:
-
使用
getline或设置cin格式来读取包含空格的输入。 -
在
dfs函数开始前,添加边界判断代码。 -
将变量名
m和n改为rows和cols,以提高代码的可读性。 -
将全局变量
cnt和maxc改为局部变量,并将其定义在main函数或dfs函数中,以控制变量的作用域。 -
在定义变量时进行初始化。
修改后的代码:
#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);
}
}
注意: 以上代码示例仅供参考,实际应用中可能需要根据具体的场景进行调整。
原文地址: https://www.cveoy.top/t/topic/oXKe 著作权归作者所有。请勿转载和采集!