Итак, ребята, недавно я много практиковался со структурами данных, графиками и т. Д. И я столкнулся с проблемой с данным кодом.Я реализую граф, который представлен списком смежности. Проблема, с которой я сталкиваюсь, заключается в том, когда я пытаюсь реализовать решение, используя пользовательский ввод.Я пытался сделать это разными способами, но я все еще сталкиваюсь с некоторыми проблемами в программе.Поскольку я использую вектор, который принимает список целых чисел, всякий раз, когда я пытаюсь заполнить вектор циклом while (например), я не знаю почему, но я не могу его заполнить правильно.И поскольку моя ошибка начинается даже оттуда, я не знаю, как поступить с программой.Если вы, ребята, можете дать мне какую-то подсказку о том, как я могу реализовать свой код для работы с пользовательским вводом, или даже дать мне аналогичный код, с которым я работаю, я был бы очень благодарен!
Это мой код:
const int N = 4;
//purpose of the class is to tell what the weight of the given edge is
class Edge{
private:
double weight;
int vertex_id;
public:
//constructor that initializes the weight and vertex id
Edge(double w, int id)
{
weight = w;
vertex_id = id;
}
double getWeight() const
{
return weight;
}
int getId() const
{
return vertex_id;
}
};
int main()
{
std::vector<std::list<Edge>> adjList(N); //creating our vector that will store a list of integers
adjList[0].push_back(Edge(4,1)); //pushing back the first neighbours of our Zero list
adjList[0].push_back(Edge(2,2)); //pushing back the second neighbours of our Zero list and so on...
adjList[1].push_back(Edge(4,0));
adjList[1].push_back(Edge(5,2));
adjList[2].push_back(Edge(2,0));
adjList[2].push_back(Edge(5,1));
adjList[2].push_back(Edge(1,3));
adjList[3].push_back(Edge(1,2));
std::vector<std::list<Edge>>::iterator i; //declaring our vector iterator
int c = 0; //we create a counter(and ofcourse assign zero to it)
//create the for loop, where the iterator starts at the begining of the vector
//and ends when the vector (adjList) ends
//*KEEP IN MIND THAT THE FIRST FOR LOOP ONLY ITERATES THROUGH THE NODES OF THE VECTOR
for (std::vector<std::list<Edge>>::iterator i = adjList.begin(); i != adjList.end(); i++)
{
cout << "Vertices connected to our node: " << c << endl;
std::list<Edge> li = *i; //this pointer serves the purpose to get the list for each different node
//NOW THE SECOND FOR LOOP ITERATES THROUGH THE LISTS, THAT EACH NODE CONTAINS
for (std::list<Edge>::iterator iter = li.begin(); iter != li.end(); iter++)
{
cout << " (V = " << (*iter).getId() << " weight= " << (*iter).getWeight() <<")";
}
cout << endl; // we end the line between the different nodes of the vector
c++; //increment our counter
}