2012-02-26 19 views
0

多加重グラフを作成しようとしています。入力方法私のマルチグラフにエッジが保存されていません

  1. 頂点ユーザーの最初のユーザー数を、次の中で行われるべき
    がしたいと
  2. プログラマのマップのi番目の行は私の部屋から頂点 の詳細は直接アクセスが含まれています。 EX


//
T 5 R 4//(頂点(頂点1エッジ有する重量 '' により頂点2に接続されています) 2エッジを有する重量 't'and'r')によって頂点4に接続されている

R 2 T 3
B 5 I 5 O 5

#include <iostream> 
#include <vector> 
#include <sstream> 
using namespace std; 
struct maps{ 
vector<char> weight; //for storing multiple-edge and self-loop![enter image description here][1] 
}; 
void input_edge(int n,maps m[10][10]) 
{ 
std::string user_input; 
std::istringstream iss(user_input); 
char letter;// for making tokens 
int index; // for making tokens 
int i; 
for(i=1;i<=n;i++) 
{ std::getline(std::cin, user_input); 
    while (iss >> letter >> index) 
    m[i][index].weight.push_back(letter); 
} 
} 
int main() 
{ int n;//no.of vertex user want to make graph 
    cin>>n; 
    cin.ignore(1000,'\n'); 
    maps m1[10][10]; 
    input_edge(n,m1); 
    int i,j; 
    for(i=1;i<=n;i++) 
    for(j=1;j<=n;j++) 
    {cout<<"no of edge between vertex"<<i<<' '<<"and"<<' '<<j<<':'<<m1[i][j].weight.size()<<endl;}//to find no of edge between 2 vertex 
} 

が、私はそれを修正する方法を教えてoutputs.please間違って取得しています。..

[1]:http://i.stack.imgur.com/sTgeD.png

答えて

1

あなたはistringstreamの使用をよく理解していません。この行にはstd::istringstream iss(user_input);が入力文字列ストリームから読み込むすべての内容を入力します。それ以来、あなたはstd::getline(std::cin, user_input);で何個のものを読んでも、issの内容は決して変更されません。つまり、入力文字列ストリームはnull以外のものをあなたに提供することはありません。次のようにコードを変更してください。

void input_edge(int n,maps m[10][10]) 
{ 
std::string user_input; 

char letter;// for making tokens 
int index; // for making tokens 
int i; 
for(i=1;i<=n;i++) 
{ std::getline(std::cin, user_input); 
    std::istringstream iss(user_input); 
    while (iss >> letter >> index) 
    m[i][index].weight.push_back(letter); 
} 

違いがあるかどうかを確認してください。

1

issをあまりに早く初期化すると、issが「空のストリーム」になります。 getlineの呼び出しの直後にiss宣言行を移動すると役立ちます。

関連する問題