分段错误,同时接受来自输入文件的图形输入

时间:2017-05-14 13:35:05

标签: c++ graph stl

我正在编写一个程序来查找给定图表的"强连接组件"

为此,我使用以下算法 1)应用DFS并按堆栈中的完成时间的降序推送节点 2)转置图形。 (反转图形的边缘)
3)弹出节点并再次应用DFS。

如果我按功能 addEdge(int u,int v)接受图形边缘(从节点u到节点v的边缘)。
程序正常工作。
问题:但是当我尝试通过输入文件接受图形时,它给了我错误 我没有给整个程序,因为它正常工作。

class Graph
{
    int V;
    list<int> *adj;
    void fillorder( int v , bool visited[] , stack<int> &stack);
    void DFSUtil(int v , bool visited[]);    

    public:     

    Graph( int V);
    void printSCCs();
    Graph get_Transpose();
    void print_graph();
    void read_input_file();

};     


    Graph:: Graph(int V)
{
    this-> V = V;
    adj = new list<int>[V];
}
void Graph :: read_input_file()
{
   const long int N = 100;

   std::ifstream infile("S.txt"); 
   std::string line;

   int i = 0;
   while ( i < N && getline(infile, line) )
   {
      std::istringstream str(line);
      int u;

      str >> u;
      if ( u > N )
      {
         // Problem.
         abort();
      }

      int v;
      while ( str >> v )
      {
         adj[u-1].push_back(v);
      }
      ++i;
   }
}

void Graph :: print_graph()
{
    for( int i = 0 ; i < 9 ; i++ )
    {
        list<int> :: iterator itr;
        for( itr = adj[i].begin(); itr != adj[i].end(); ++itr )
        {
           cout<< i+1 <<" --> " << *itr <<endl;
        }
    }
}

void Graph:: printSCCs()
{
    stack<int>Stack;
    bool *visited = new bool[V];
    for( int i = 0 ; i < V ; i++ )
        visited[i] = false;

     for( int i = 0 ; i < V ; i++ )
     if(visited[i] == false)
     fillorder(i , visited , Stack);

     Graph gr = get_Transpose();

     for( int i = 0 ; i < V ; i++ )
        visited[i] = false;

        while( Stack.empty() == false)
        {

            int no = Stack.top();
            Stack.pop();
            if(visited[no] == false)
              {
              gr.DFSUtil(no , visited);
              cout<< endl;
              }
        }
}

int main()
{
    Graph g(9);
    g.read_file(); // Working perfectly
    g.print_graph(); // showing graph perfectly
    g.printSCCs(); // Giving error : Segmentation fault: core dump
    return 0;
}       

图表正确打印但g.printSCCs()无效。

Error is : Segmentation fault: core dump       

Now if g.print_graph() is working perfectly then why not g.printSCCs() ?       

注意:我没有粘贴整个程序只是为了确保它是可读的 此外,通过手动输入边缘,整个程序完美地工作,所以我认为任何函数都不会出错。

I / P文件数据:

1 4

2 8

3 6

4 7

5 2

6 9

7 1

8 5

8 6

9 7

9 3

0 个答案:

没有答案