假设我们有以下代码(稍微修改了 dfs):
#include <iostream>
#include <vector>
using namespace std;
vector <int> vec[100];
bool used[100];
int n;
void dfs(int v){
if (used[v])
return ;
used[v] = true;
for (int to : vec[v])
if (to < v) {
cout << "first action\n";
cout << "second action\n";
cout << "third action\n";
dfs(to);
}
for (int to : vec[v])
if (to > v) {
cout << "first action\n";
cout << "second action\n";
cout << "third action\n";
dfs(to);
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
int q;
cin >> q;
if (q)
vec[i].push_back(j);
}
}
dfs(1);
return 0;
}
针迹
cout << "first action\n";
cout << "second action\n";
cout << "third action\n";
dfs(to);
被重复 2 次,因此将它们移动到一个函数中是合乎逻辑的。原来这段代码:
#include <iostream>
#include <vector>
using namespace std;
vector <int> vec[100];
bool used[100];
int n;
void f(int to){
cout << "first action\n";
cout << "second action\n";
cout << "third action\n";
dfs(to);
}
void dfs(int v){
if (used[v])
return ;
used[v] = true;
for (int to : vec[v])
if (to < v) {
f(to);
}
for (int to : vec[v])
if (to > v) {
f(to);
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
int q;
cin >> q;
if (q)
vec[i].push_back(j);
}
}
dfs(1);
return 0;
}
但是,由于显而易见的原因,它不起作用。
当然,您可以只在函数中添加 3 行:
cout << "first action\n";
cout << "second action\n";
cout << "third action\n";
这个选项有效。但是仍然有重复的代码:
f();
dfs(to);
我是否正确理解在这种情况下不可能摆脱这种重复?
在 f() 方法定义之前添加 dfs() 方法声明