我正在尝试制作多重加权图 输入将按以下方式进行
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
}
但我得到的输出不正确。请告诉我如何修复它..
答案 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);
}
看看是否有任何区别。