Pagini recente » Cod sursa (job #2315798) | Cod sursa (job #2718776) | Cod sursa (job #2634552) | Cod sursa (job #2585571) | Cod sursa (job #2891156)
#include <stdio.h>
#include <stdlib.h>
typedef struct edge
{
int leftNode;
int rightNode;
} edge;
typedef struct graphEdges
{
edge *edges;
int numNodes;
int numEdges;
int S;
} graphEdges;
int lmax;
graphEdges readGraphEdgeList(const char *fileName)
{
graphEdges graph;
graph.numEdges = 0;
graph.edges = NULL;
FILE *f = fopen(fileName, "r");
if (f == NULL)
return graph;
if (!feof(f))
{
int numNodes;
fscanf(f, "%d", &numNodes);
graph.numNodes = numNodes;
int numEdges;
fscanf(f, "%d", &numEdges);
graph.numEdges = numEdges;
int S;
fscanf(f, "%d", &S);
graph.S = S;
}
graph.edges = (edge *)malloc((graph.numEdges + 1) * sizeof(edge));
int k = 1;
while (!feof(f))
{
int left, right;
fscanf(f, "%d %d", &left, &right);
graph.edges[k].leftNode = left;
graph.edges[k].rightNode = right;
k++;
}
fclose(f);
return graph;
}
void BFS(graphEdges graph, int target, FILE *f)
{
if (target == graph.S)
{
fprintf(f, "%d ", 0);
return;
}
for (int i = 1; i < graph.numEdges; i++)
{
if (graph.edges[i].leftNode == graph.S)
{
if (graph.edges[i].rightNode == target)
{
fprintf(f, "%d ", 1);
return;
}
}
}
int saved;
for (int i = 1; i < graph.numEdges; i++)
{
if (graph.edges[i].rightNode == target && graph.edges[i].leftNode == graph.S)
{
fprintf(f, "%d ", lmax + 1);
return;
}
if (graph.edges[i].rightNode == target)
{
saved = graph.edges[i].leftNode;
lmax++;
i = 0;
target = saved;
}
}
fprintf(f, "%d ", -1);
}
int main(int argc, char *argv[])
{
graphEdges graph = readGraphEdgeList("bfs.in");
FILE *f = fopen("bfs.out", "w");
for (int i = 1; i <= graph.numNodes; i++)
{
lmax = 0;
BFS(graph, i, f);
}
fclose(f);
return 0;
}