Pagini recente » Cod sursa (job #2316220) | Cod sursa (job #54936) | Cod sursa (job #357924)
Cod sursa(job #357924)
#include <cstdio>
#include <cstdlib>
#include <vector>
#define NMax 100010
using namespace std;
int *a[NMax], n, m;
FILE *f = fopen("bfs.in", "r");
vector<int> A[NMax];
void sterge()
{
for (int i = 1; i <= n; i++)
free(a[i]);
}
void bfs(int start)
{
int v[NMax], i, k, cost[NMax];
for (i = 1; i <= n; i++)
v[i] = 0;
v[start] = 1;
int coada[NMax], st = 1, dr = 1;
coada[1] = start;
cost[start] = 0;
while (st <= dr)
{
k = coada[st];
printf("k = %d\n", k);
for (i = 1; i <= a[k][0]; i++)
if (!v[a[k][i]])
{
dr++;
coada[dr] = a[k][i];
v[a[k][i]] = 1;
cost[a[k][i]] = cost[k] + 1;
}
st++;
}
printf("\ncosturi : \n");
for (i = 1; i <= n; i++)
if (v[i])
fprintf(f, "%d ", cost[i]);
else
fprintf(f, "-1 ");
}
void bfsA(int start)
{
int v[NMax], i, k, cost[NMax];
for (i = 1; i <= n; i++)
v[i] = 0;
v[start] = 1;
int coada[NMax], st = 1, dr = 1;
coada[1] = start;
cost[start] = 0;
while (st <= dr)
{
k = coada[st];
printf("k = %d\n", k);
for (i = 1; i <= A[k].size(); i++)
if (!v[a[k][i]])
{
dr++;
coada[dr] = A[k][i];
v[A[k][i]] = 1;
cost[A[k][i]] = cost[k] + 1;
}
st++;
}
printf("\ncosturi : \n");
for (i = 1; i <= n; i++)
if (v[i])
fprintf(f, "%d ", cost[i]);
else
fprintf(f, "-1 ");
}
int main()
{
int start ;
fscanf(f, "%d%d%d", &n, &m, &start);
int k, i, j;
for (i = 1; i <= n; i++)
{
A[i].push_back(0);
a[i] =(int *) malloc(sizeof(int));
a[i][0] = 0;
}
for (k =1; k <= m; k++)
{
fscanf(f, "%d%d", &i, &j);
A[i].push_back(j);
a[i][0]++;
a[i] = (int *)realloc(a[i], sizeof(int) * (a[i][0] + 1));
a[i][a[i][0]] = j;
}
fclose(f);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= a[i][0]; j++)
printf("%3d", a[i][j]);
printf("\n");
}
f = fopen("bfs.out", "w");
// bfs(start);
// fprintf(f, "\n||---------||\n");
bfsA(start);
sterge();
return 0;
}