池塘计数 ans += g[y][x] == ‘W’ 的意思

#include

using namespace std;

const int N = 1010;
int m, n;
char g[N][N];

static constexpr int dirs[][2] {{0, -1}, {-1, -1}, {-1, 0}, {-1, 1},
{0, 1}, {1, 1}, {1, 0}, {1, -1}};

void dfs(int x, int y) {
if (x < 0 || y < 0 || x == n || y == m || g[y][x] == '.')
return;
g[y][x] = '.'; // mark as seen
for (int i = 0; i < 8; ++i)
dfs(x + dirs[i][0], y + dirs[i][1]);
}

int main() {
cin >> m >> n;
for (int y = 0; y < m; ++y)
for (int x = 0; x < n; ++x) cin >> g[y][x];

int ans = 0;
for (int y = 0; y < m; ++y)
for (int x = 0; x < n; ++x) {
ans += g[y][x] == 'W';
dfs(x, y);
}

cout << ans << endl;
return 0;
}

img

==是逻辑判断,如果等于'W',那么计数加1

==的优先级大于+=,所以先执行==,然后执行+=。
ans += g[y][x] == ‘W’ 等价于

if (g[y][x] == 'W') // ==运算的结果只有2个,真或者假,1为真,0为假
    ans += 1;
else
    ans += 0;

C语言运算符的优先级表:

运算符优先级_百度百科 在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。 https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin