2 条题解
-
0
bfs代码:
#include <bits/stdc++.h> using namespace std; // 定义 BFS 函数 int bfs(const string &start_str, const vector<pair<int, int>> &rule) { int cnt = 1; // 初始化计数器 int len = start_str.size(); queue<string> q; unordered_set<string> vised; // 存储已经访问过的字符串 q.push(start_str); vised.insert(start_str); while (!q.empty()) { string node = q.front(); q.pop(); for (auto &rr : rule) { char from = rr.first + '0'; char to = rr.second + '0'; for (int i = 0; i < len; i++) { if (node[i] == from) { string new_node = node; new_node[i] = to; if (vised.find(new_node) == vised.end()) { q.push(new_node); vised.insert(new_node); cnt++; } } } } } return cnt; } int main() { string str; cin >> str; int k; cin >> k; vector<pair<int, int>> rule(k); for (int i = 0; i < k; i++) { cin >> rule[i].first >> rule[i].second; } int cnt = bfs(str, rule); // 调用 BFS 函数 cout << cnt; return 0; } -
0
100分代码:
#include <bits/stdc++.h> using namespace std; int main() { string s; int k; // 输入初始数字 cin >> s; int len = s.size(); // 输入转换规则 cin >> k; vector<pair<int, int>> rules(k); for (int i = 0; i < k; i++) { cin >> rules[i].first >> rules[i].second; } // 使用队列和集合 queue<string> q; unordered_set<int> visited; // 初始化队列和访问集合 q.push(s); visited.insert(stoi(s)); int cnt = 1; // 初始包含原数 // 广度优先搜索 while (!q.empty()) { string current = q.front(); q.pop(); for (const auto &rule : rules) { char from = rule.first + '0'; char to = rule.second + '0'; // 对当前数字的每个字符进行尝试替换 for (int i = 0; i < len; i++) { if (current[i] == from) { string next = current; next[i] = to; int next_val = stoi(next); if (visited.find(next_val) == visited.end()) { visited.insert(next_val); q.push(next); cnt++; } } } } } // 输出不同整数的个数 cout << cnt << endl; return 0; }
- 1
信息
- ID
- 839
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 40
- 已通过
- 6
- 上传者