vector.push_back()崩溃了c ++

时间:2014-07-01 17:32:43

标签: c++ vector

我正在尝试实现执行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);
            }

        }
}

0 个答案:

没有答案