Я пытаюсь представить базовый неориентированный граф через список смежности в STL C++. Вот мой код:
#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int no_vertices,no_edges;
printf("Enter the no. of vertices and Edges : ");
scanf("%d%d",&no_vertices,&no_edges);
vector<pair<int,int> > graph[no_vertices];
//Pair because we edge along with its weight!!
printf("\nEnter the Edges along with their weight :");
int s,d,weight;
for(int i=0;i<no_edges;i++)
{
scanf("%d%d%d",&s,&d,&weight);
graph[s].push_back(pair<int,int>(d,weight));
}
for(int i=0;i<no_vertices;i++)
{
vector<pair<int,int> >::iterator it = graph[i].begin();
cout<<endl;
while(it+1!= graph[i].end())
{
printf("%d->",*it);
it++;
}
printf("%d",*it);
}
return 0;
}
В приведенном выше коде я пытаюсь напечатать каждую вершину вместе с каждым ее ребром, компилятор что-то печатает, а затем переходит в какую-то ошибку памяти или бесконечный цикл. Например. ввод в приведенной выше программе V=4 E=4 и ребра вместе с весом
0 1 4
1 2 5
1 5 2
3 1 3
Ожидаемый результат-
0->1
1->2->5
2
3->1
но выход есть
1
2->5
а затем ошибка памяти или бесконечный цикл. Пожалуйста, предложите улучшения в моем коде ??
–
Спасибо!