Ошибка при просмотре ориентированного графа С ++ Сегментация

Пользователь будет вводить количество узлов на графике, а затем общее имя «планеты». тогда они будут вводить

где это название планеты и количество мест на этой планете.
Затем следуют строки, каждая из форм:
….
указывает название местоположения, указывает количество соседей и…. список соседей

Например:
3
Венера 4
космодром 2 пляж дискотека
пляж 1 бар
бар 1 космодром
дискотека 1 бар
Нептун 3
космодром 1 игрушечная фабрика
фабрика игрушек 0
arms_depot 1 Weapons_depot
Бинарный-2 2
космодром 1 ноль один
ноль один один космодром

Там всегда будет космодром. Затем я должен начать с космодрома и указать, какие узлы также нельзя получить. Это та часть, в которой я считаю, что Сег ошибается. Затем он скомпилирует ошибку seg и попытается вывести узлы.

Вот код:

#include <iostream>
#include <map>
#include <vector>
using namespace std;
bool path(int x, int y, vector<vector<bool> > graph);

int main()
{
int num_planets;
cin>>num_planets;

for (int m=0; m<num_planets; m++)
{
string planet;
int num_locations;

cin>>planet;
cin>>num_locations;
map<string, int> m_planet;
vector<vector<bool> > graph;
graph.resize(num_locations);

for (int n=0; n<num_locations; n++)
{
graph[n].resize(num_locations);
}
for(int k=0; k<num_locations; k++)
{
for (int j=0; j<num_locations; j++)
{
graph[k][j] = false;
}
} vector<vector<string> > connections;

vector<string> places;
for (int o=0; o<num_locations; o++)
{
string place;

cin>>place;
places.push_back(place);
m_planet[place] = o;
int edges;

cin>>edges;
connections.resize(num_locations);
connections[o].resize(edges);

for (int p=0; p<edges; p++)
{
string connect;
cin>>connect;
connections[o][p]=connect;
}
}

for (int q=0; q<num_locations; q++)
{
for (int r=0; r<connections[q].size(); r++)
{
int from, to;
from = m_planet[places[q]];
to = m_planet[connections[q][r]];
graph[from][to] =true;
}
}

cout<<"In planet "<<planet<<":"<<endl;

int num_paths = 1;
for(int s=1; s<num_locations; s++)
{
bool route;
route = path(0, s, graph);

if(route == false)
{
cout<<places[s]<<"unreachable from the#"<<places[0]<<"."<<endl;
}

else
{
num_paths++;
}
}

if (num_paths == num_locations)
{
cout<<"All locations reachable from the#"<<places[0]<<"."<<endl;
}
}

return 0;
}

bool path(int x, int y, vector<vector<bool> > graph)
{
for (int m=0; m<graph[x].size(); m++)
{
if(graph[x][m] == true)
{
if (graph[x][m] == y)
{
return true;
}

else
{
return path(m, y, graph);
}
}
}

return false;
}

0

Решение

Вы перезаписываете num_locations, но пытаетесь использовать его для доступа к обоим измерениям. Это означает, что, если пользователь не вводит одно и то же значение каждый раз, вы столкнетесь с проблемой, поскольку одно из измерений выйдет за пределы.

Храните отдельные переменные для каждого измерения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]