我是DFS的新手,在尝试在DFS上做某事时,这是我尝试编写的程序。想法是计算以节点1为根的子树的所有节点的总和。 这个想法是创建一个函数dfs(node),使其存储以'node'为根的子树的节点的值之和。当parent == child时,我确保循环停止(否则将进行无限递归)。
程序无法编译。
代码(Idone:https://ideone.com/ntS9AG):
#include<bits/stdc++.h>
using namespace std;
#define ff(i,ii,jj) for(int i=ii; i<=jj; i++)
int n;
int val[10000];
vector<int> adj(10000); // adj.size() compiles correctly when adj[10000] is written; won't that create columns instead of rows?
int sum[10000];
bool visited[10000];
void dfs(int node)
{
if (!visited[node])
{
sum[node]+=val[node];
visited[node]=true;
for (int i=0; i<adj[node].size(); i++)
{
if (!visited[adj[node][i]]) {visited[adj[node][i]]=true; dfs(adj[node][i]); sum[node]+=sum[adj[node][i]];}
}
}
}
int main()
{
memset(sum,0,sizeof(sum));
memset(visited, false, sizeof(visited));
cin>>n;
for (int i=1; i<=n-1; i++) {int x,y; cin>>x>>y; adj[x].push_back[y]; adj[y].push_back[x];}
for (int i=1; i<=n; i++) cin>>val[i];
dfs(1);
cout<<sum[1];
}
P.S。 :该程序只是在DFS上写一些东西,因此我尝试进行递归。我当然知道我可以只对输入值求和。
答案 0 :(得分:0)
vector
但是,当您编写vector
考虑此图:
因此,您的邻接列表如下
TabStack2
很明显,您可以看到需要5个向量才能使用邻接表存储此图。这就是为什么您需要以其他方式定义图形的原因。 (您在评论中的书写方式)。