我正在尝试实现执行DFS遍历的程序。当N被预定义为特定值并且边缘也被赋予实际值时,程序正常工作(请参阅代码的注释部分)。当我尝试从用户获取N的值时,以及当我尝试接受用户的边缘时,会出现问题。我已经调试过,它在第adj[u].push_back(v);
行崩溃了。但是,如果我写adj[0].push_back(1)
即实际数字而不是变量,它可以正常工作,但是当我接受你的时候会崩溃。 v来自用户。
#include <iostream>
#include <stack>
#include <list>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
int N, M;
vector<std::list<int> > adj (N);
vector<bool> visited (N);
void dfs( int start);
int main()
{
cin>>N>>M;
for(int i = 0; i < M; i++ )
{
int u,v;
cin>>u;
cin>>v;
u--;
v--;
adj[u].push_back(v);
adj[v].push_back(u);
}
/* adj[0].push_back(1);
// adj[1].push_back(2);
// adj[1].push_back(0);
// adj[1].push_back(1);
// adj[2].push_back(0);
//adj[2].push_back(1);
// */
std::vector<std::list<int> >::iterator i;
int c=0;
for(std::vector<std::list<int> >::iterator i= adj.begin(); i!=adj.end(); i++)
{
cout<<"Vertices connected to node "<<c<<"are ";
std::list<int> li=*i;
for(std::list<int>::iterator iter = li.begin(); iter!=li.end(); iter++)
{
cout<<*iter<<" ";
}
cout<<endl;
c++;
}
cout<<endl;
cout<<"DFS TRAVERSAL"<<endl;
dfs(0);
cout<<endl;
return 0;
}
void dfs( int start)
{
stack<int> s;
s.push(start);
while(!s.empty())
{
int top=s.top();
s.pop();
if(visited[top]==false)
{
cout<<" "<<top;
visited[top]=true;
std::list<int> li=adj[top];
for(std::list<int>::iterator iter= li.begin(); iter!=li.end(); iter++)
s.push(*iter);
}
}
}