多叉树的递归遍历,和二叉树不同的是,多叉树只有先序遍历,以及一个好的编程习惯是很重要的,题不算太难但是改代码改了太久
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sz(x) ((int) (x).size())
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
int cur, ans;
int rec[35][35];
string s1, s2;
void dfs(int level, int r, int c, string s) {
if (s[cur] == 'f') {
for (int i = r; i < r + (1 << (6 - level)); i++) {
for (int j = c; j < c + (1 << (6 - level)); j++) {
if (!rec[i][j]) { rec[i][j] = 1; ans++; }
}
}
cur++;
return;
} else if (s[cur] == 'e') {
cur++;
return;
}
cur++;
dfs(level + 1, r, c + (1 << (5 - level)), s);
dfs(level + 1, r, c, s);
dfs(level + 1, r + (1 << (5 - level)), c, s);
dfs(level + 1, r + (1 << (5 - level)), c + (1 << (5 - level)), s);
}
int main() {
int n;
cin >> n;
while (n--) {
cin >> s1 >> s2;
ans = 0;
memset(rec, 0, sizeof(rec));
cur = 0; dfs(1, 0, 0, s1);
cur = 0; dfs(1, 0, 0, s2);
printf("There are %d black pixels.\n", ans);
}
return 0;
}