没有边缘存储在我的多图中

时间:2012-02-26 12:42:45

标签: c++

我正在尝试制作多重加权图 输入将按以下方式进行

  1. 首先是顶点用户想要的用户号和
  2. 程序员地图的第i行包含顶点的详细信息 可从房间直接进入i。为前
  3. 5
    a 2 //(顶点1通过具有重量'a'的边连接到顶点2)
    t 5 r 4 //(顶点2通过具有重量't'和'r'的边连接到顶点4)
    a 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
    } 
    

    但我得到的输出不正确。请告诉我如何修复它..

      

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

2 个答案:

答案 0 :(得分:1)

您过早地初始化iss会导致iss成为“空流”。在致电iss之后立即移动getline申报行应该会有所帮助。

答案 1 :(得分:1)

您不太了解istringstream的用法。在此行std::istringstream iss(user_input);上,您将填写您将从输入字符串流中读取的所有内容。从那时起,你永远不知道你在std::getline(std::cin, user_input);中读到了多少东西,你永远不会改变iss的内容,这意味着输入字符串流永远不会为你提供除空之外的任何东西。像这样更改你的代码:

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);
}

看看是否有任何区别。