我的 DFS 代码有什么问题?
What's Wrong In My DFS Code?
我已经尝试实现递归 DFS,正如我在 TH Cormen 的书中找到的那样。我实施了算法。但是程序崩溃了。这是我的代码:
#include<bits/stdc++.h>
using namespace std;
vector<int>graph[100];
int tim;
int start[100], finish[100], path[100], color[100];
void DFS_Visit(int u)
{
color[u] = 0;
tim = tim + 1;
start[u] = tim;
for(int i=0; i<graph[u].size(); i++)
{
int v = graph[u][i];
if(color[v]=-1)
{
path[v] = u;
DFS_Visit(v);
}
}
color[u] = 1;
tim = tim + 1;
finish[u] = tim;
}
int main()
{
int nodes, edges, u, v;
cin>>nodes>>edges;
for(int i=0; i<edges; i++)
{
cin>>u>>v;
graph[u].push_back(v);
graph[v].push_back(u);
}
for(int i=1; i<=nodes; i++)
{
color[i] = -1;
path[i] = -1;
//cout<<'1'<<endl;
}
tim = 0;
for(int i=1; i<=nodes; i++)
{
//cout<<'1'<<endl;
if(color[i]==-1)
{
DFS_Visit(i);
}
}
for(int i=1; i<=nodes; i++)
{
printf("Node %d: Starting_Time: %d || Finishing Time: %d\n", i, start[i], finish[i]);
}
return 0;
}
任何人都可以学习我我的代码有什么问题吗?如何解决此问题。我把代码写成了 TH Cormen 的算法书。
这是一个问题
if(color[v]=-1)
即设置color[v]
为-1
。
我很惊讶你的编译器没有为此生成警告。
我有错误。即
if(color[v]=-1) will be if(color[v]==-1)
我已经尝试实现递归 DFS,正如我在 TH Cormen 的书中找到的那样。我实施了算法。但是程序崩溃了。这是我的代码:
#include<bits/stdc++.h>
using namespace std;
vector<int>graph[100];
int tim;
int start[100], finish[100], path[100], color[100];
void DFS_Visit(int u)
{
color[u] = 0;
tim = tim + 1;
start[u] = tim;
for(int i=0; i<graph[u].size(); i++)
{
int v = graph[u][i];
if(color[v]=-1)
{
path[v] = u;
DFS_Visit(v);
}
}
color[u] = 1;
tim = tim + 1;
finish[u] = tim;
}
int main()
{
int nodes, edges, u, v;
cin>>nodes>>edges;
for(int i=0; i<edges; i++)
{
cin>>u>>v;
graph[u].push_back(v);
graph[v].push_back(u);
}
for(int i=1; i<=nodes; i++)
{
color[i] = -1;
path[i] = -1;
//cout<<'1'<<endl;
}
tim = 0;
for(int i=1; i<=nodes; i++)
{
//cout<<'1'<<endl;
if(color[i]==-1)
{
DFS_Visit(i);
}
}
for(int i=1; i<=nodes; i++)
{
printf("Node %d: Starting_Time: %d || Finishing Time: %d\n", i, start[i], finish[i]);
}
return 0;
}
任何人都可以学习我我的代码有什么问题吗?如何解决此问题。我把代码写成了 TH Cormen 的算法书。
这是一个问题
if(color[v]=-1)
即设置color[v]
为-1
。
我很惊讶你的编译器没有为此生成警告。
我有错误。即
if(color[v]=-1) will be if(color[v]==-1)