2016-10-09 11 views
0

質問は: あなたがNノードとMエッジからなる無向グラフが与えられています。このグラフは、自己ループと複数のエッジで構成されています。また、Qのクエリも受け取りました。各クエリについて、2つの整数ABを与えられます。ノードAとノードBの間にエッジが存在するかどうかを調べるだけです。はいの場合は "YES"(引用符なし)を、それ以外の場合は "NO"(引用符なし)を印刷します。エッジ有無(エッジが存在するかどう見つける)

マイコード:

#include<bits/stdc++.h> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    int n,m; 
    cin>>n>>m; 
    vector< vector<int> > v; 
    int a,b; 

    vector<int>temp; 

    while(m--) 
    { 
     cin>>a>>b; 
     temp.push_back(a); 
     v.push_back(temp); 
     v[a].push_back(b); 
     temp.clear(); 
    } 

    int q; 
    cin>>q; 

    while(q--) 
    { 
    cin>>a>>b; 
    int flag=0; 

    for(int i=0;i<v[a].size();i++) 
    { 
     if(v[a][i]==b) 
     { 
     cout<<"YES"<<endl; 
     flag=1; 
     break; 

     } 
    } 

    if(flag!=1) 
    cout<<"NO"<<endl; 

    } 


    return 0; 
} 

私はセグメンテーションフォールトを取得しています。私は間違って何をしていますか?

答えて

0

たとえば、エッジを追加する場合は、空のベクトル(temp)に3を押し込み、の温度をvに押します。だから今vのサイズは1です。そして、あなたはv[3]push_back 5にしてみてください:あなたのvのみ1つのアイテムを持っているので

v[a].push_back(b); 

v[3]は存在しません。したがって、セグメンテーションフォールト

どうすればよいですか?
事前にノード数(n)を知っているので、vをノード数(1インデックス作成を使用する場合はn+1)で初期化できます。だからvnが空になります。vectorsです。その後、安全にpush_backの商品をv[a]に入れることができます。また、あなたのグラフがすべてのエッジに対して無向であるため、(a、b)の場合は、v[a].push_back(b)v[b].push_back(a)の両方を実行する必要があります。ここで

は実施例である:

int n,m; 
cin>>n>>m; 
vector< vector<int> > v(n+1); // initialize v with (n+1) empty vectors 
           // because we want to use 1-indexing 
int a,b; 
while(m--) 
{ 
    cin>>a>>b; 
    v[a].push_back(b); 
    v[b].push_back(a); 
} 
関連する問題