Мое задание - прочитать график в этом формате ввода:
и вывести его в этом формате
Тем не менее, я продолжаю получать ошибки сегментации при запуске моей программы. Я думаю, что моя проблема заключается в написании графика, но я не могу понять, почему. Может кто-нибудь указать мне правильное направление, пожалуйста?
Еще немного информации: readGraph должен использовать insertEdge, чтобы вставить ребро. Соблазнительно читать три числа в строке, несмотря ни на что. В последней строке будет успешно прочитано только одно число. Но программы, как правило, модифицируются, и, где это не слишком много работы, это хорошая идея, чтобы быть готовым к изменениям. Что если программа будет изменена, чтобы после графика было больше входных данных? Вы не хотите, чтобы readGraph считывал то, что следует за графиком.
Напишите readGraph, чтобы он не зависел от строки, содержащей только 0, чтобы быть последним элементом ввода. Это легко сделать. Прочитайте первое число и проверьте его, прежде чем читать следующие два.
struct Edge
{
int vertex1;
int vertex2;
int weight;
Edge()
{
vertex1 = 0;
vertex2 = 0;
weight = 0;
}
};
struct Graph
{
int numOfVertices;
int numOfEdges;
Edge* edges;
int sizeOfArray;
Graph(int n, int e)
{
numOfVertices = n;
numOfEdges = 0;
sizeOfArray = e;
edges = new Edge[e];
}
};
//Inserts an edge between vertices u and v, of weight w, into graph g.
void insertEdge(int u, int v, int w, Graph* g)
{
Edge e;
e.vertex1 = u;
e.vertex2 = v;
e.weight = w;
g->edges[g->numOfEdges] = e;
g->numOfEdges++;
}
//Reads vertices, edges, and weight from the input
//and allocates a graph in the heap with enough room for e edges.
Graph* readGraph(int e)
{
int numberOfVertices, edge;
scanf("%i", &numberOfVertices);
Graph* g = new Graph(numberOfVertices, e);
int u, v, w;
while(scanf("%i", &edge) != 0)
{
scanf("%i%i%i", &u, &v, &w);
insertEdge(u,v,w,g);
}
return g;
}
//Writes graph g by listing the number of vertices and the number of edges.
void writeGraph(const Graph* g)
{
printf("There are %i vertices and %i edges", g->numOfVertices, g->numOfEdges);
printf("Vertices Weight");
for(int i = 0; i < g->numOfEdges; i++)
{
printf(" %i %i %i", g->edges[i].vertex1, g->edges[i].vertex2, g->edges[i].weight);
}
}
int main()
{
int maxEdges = 1000;
Graph* g = readGraph(maxEdges);
writeGraph(g);
return 0;
}