然而,我不断得到wa。请帮忙。
下面是我的代码:
struct Graph{
int V;
vector<int> *adj;
vector<int> *auxiliary;
vector<vector<int> > components;
Graph(int _V)
{
V=_V;
adj=new vector<int>[V+1];
auxiliary=new vector<int>[V+1];
}
void addEdge(int u, int v)
{
adj[u].push_back(v);
auxiliary[v].push_back(u);
}
void DFS(int u, bool *visited,stack<int> &nodes)
{
visited[u]=true;
int t;
stack<int> state;
bool present;
state.push(u);
while(!state.empty())
{
t=state.top();
visited[t]=true;
present=false;
for(vector<int>::iterator it=adj[t].begin();it!=adj[t].end();it++)
{
if(!visited[*it])
{
visited[*it]=true;
state.push(*it);
present=true;
}
}
if(!present)
{
nodes.push(state.top());
state.pop();
}
}
}
void DFSutil(int u,bool *visited,set<int> &members)
{
visited[u]=true;
stack<int> state;
int t;
bool present;
state.push(u);
while(!state.empty())
{
t=state.top();
present=false;
for(vector<int>::iterator it=auxiliary[t].begin();it!=auxiliary[t].end();it++)
{
if(!visited[*it])
{
visited[*it]=true;
present=true;
state.push(*it);
}
}
if(!present)
{
members.insert(state.top());
state.pop();
}
}
}
void kosaraju()
{
bool visited[V+1];
memset(visited,false,sizeof(visited));
stack<int> nodes;
int i,t;
//store the nodes, 1st DFS
for(i=1;i<=V;i++)
{
if(!visited[i])
DFS(i,visited,nodes);
}
//run DFS on the auxiliary(transposed) graph
set<int> members;
vector<int> answers;
memset(visited,false,sizeof(visited));
while(!nodes.empty())
{
t=nodes.top();
members.clear();
if(!visited[t])
{
DFSutil(t,visited,members);
set<int>::iterator it;
for(it=members.begin();it!=members.end();it++)
{
vector<int>::iterator itt;
for(itt=adj[*it].begin();itt!=adj[*it].end();itt++)
{
if(!present(members,*itt))
break;
}
if(itt!=adj[*it].end())
break;
}
if(it==members.end())
{
for(it=members.begin();it!=members.end();it++)
answers.pb(*it);
}
}
nodes.pop();
}
sort(answers.begin(),answers.end());
tr(answers,itt)
printf("%d ",*itt);
printf("\n");
}
};
乍一看,您的深度优先搜索(假设DFS应该是深度优先)实际上可能不是深度优先,而是广度优先搜索,因为它会立即将所有未访问的邻居添加到搜索队列中。我认为您可能需要添加一个break语句:
for(vector<int>::iterator it=adj[t].begin();it!=adj[t].end();it++)
{
if(!visited[*it])
{
visited[*it]=true;
state.push(*it);
present=true;
-----------> break;
}
}
在注释中,sudeepdino008正确地指出可以用堆栈实现DFS,但在这种情况下,我认为顶点在从堆栈中移除之前不应该标记为已访问:
for(vector<int>::iterator it=adj[t].begin();it!=adj[t].end();it++)
{
if(!visited[*it])
{
----------> //visited[*it]=true;
state.push(*it);
present=true;
}
}
问题是:考虑一个简单的图
1->2
1->3
3->2
主要内容:ion-header-bar,ion-footer-barion-header-bar 这个是固定在屏幕顶部的一个头部标题栏。如果给它加上'bar-subheader' 这个样式,它就是副标题。 用法 API 属性 类型 描述 align-title (optional) 这个是对齐 title 的。如果没有设置,它将会按照手机的默认排版(Ios的默认是居中,Android默认是居左)。它的值可以是 'left','center','right'。 no
主要内容:Header(头部),Sub Header(副标题),Footer(底部)Header(头部) Header是固定在屏幕顶部的组件,可以包如标题和左右的功能按钮。 ionic 默认提供了许多种颜色样式,你可以调用不同的样式名,当然也可以自定义一个。 bar-light 尝试一下 » bar-stable 尝试一下 » bar-positive 尝试一下 » bar-calm 尝试一下 » bar-balanced 尝试一下 » bar-energized 尝试一下 »
ion-header-bar 这个是固定在屏幕顶部的一个头部标题栏。如果给它加上'bar-subheader' 这个样式,它就是副标题。 用法 <ion-header-bar align-title="left"> <div> <button ng-click="doSomething()">Left Button</button> </div> <h1>Title!</h1
Header(头部) Header是固定在屏幕顶部的组件,可以包如标题和左右的功能按钮。 ionic 默认提供了许多种颜色样式,你可以调用不同的样式名,当然也可以自定义一个。 bar-light <div> <h1>bar-light</h1> </div> bar-stable <div> <h1>bar-stable</h1> </div> bar-positive <div
LocallyConnected1D层 LocallyConnected2D层
我有一个pyspark数据帧(df1 ),它由10K行组成,数据帧看起来像- 另一个pyspark数据帧(df2)由100k记录组成,看起来像- 我想使用pyspark内连接,最终的数据帧看起来像- df2中mobile_no的长度是12,但df1中是10。我可以加入它,但这是昂贵的操作。使用pyspark有帮助吗?