c++ - 因超时而终止?如何提高 DFS
问题描述
我尝试了一个hackerrank问题链接,由于3个测试用例超时,我被终止了。在那里,我使用了 dfs 方法来检查连接的组件并使用每个不相交元素的乘积之和获得 ans。(a b + a c + a d + b c + b d + c d == a*b + ( a+b)*c + (a+b+c)*d)。我需要知道我的 dfs 出了什么问题 ;{( 以及如何改进这一点。我不需要解决hackerrank 问题。只需要知道我的错误是什么。
这是我的代码。谢谢
#include <iostream>
#include <vector>
using namespace std;
#define For(i,a,n) for (int i=a; i<n; i++)
typedef vector<int> vi;
// returns no. of connected nodes to a given node
int connected(int node, vector<vi> adj, bool visited[]){
int count = 0;
for(auto x: adj[node]){
if(visited[x]) continue;
visited[x] = true;
count += connected(x, adj, visited) + 1;
}
return count;
}
void dfs(int nodes, vector<vi> adj, bool visited[]){
int ans = 0;
visited[nodes] = true;
int current_sum = connected(nodes, adj, visited) + 1;
while(nodes--){
if(visited[nodes]) continue;
visited[nodes] = true;
int out = connected(nodes, adj, visited) + 1;
ans += current_sum*out;
current_sum += out;
}
cout<< ans;
}
int main() {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int a,b,edges,nodes;
cin>>nodes>>edges;
bool visited[nodes];
fill(visited, visited + nodes, 0);
vector<vi> adj(nodes);
// adj[i] gives the directly connected nodes to i
while(edges--){
cin>>a>>b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(nodes-1, adj, visited);
return 0;
}
解决方案
推荐阅读
- hosting - 我做了一个网站,但是网页显示不正确
- android - Zoom Lazycolumn 项目
- linux - 为什么它在覆盖 IFS 和读取多数据信息变量时不起作用?
- java - 注释没有被复制到 getter 和 setter
- node.js - 如何在mongodb中存储hh(小时):mm(分钟)时间
- python - 如何让一个类在python中跟随另一个类
- python - 如何根据分组列获得多个组的最大值?
- c++ - 我将 Int 转换为 Float 但 Id-Type 没有改变
- python - Django FileResponse: PermissionError: [WinError 32] 该进程无法访问该文件,因为它正被另一个进程使用
- python - 具有动态标题的 Pandas 数据框