Eis a versão do código da função distancias que manipula a fila diretamente. Nesse caso, faz mais sentido tratar fila, p e u como variáveis locais:
#define N 100 int dist[N]; // variável global void distancias (int A[][N], int c) { int fila[N], p, u; for (int j = 0; j < N; ++j) dist[j] = N; dist[c] = 0; p = 0; u = 1; fila[0] = c; // c entra na fila while (p != u) { int i = fila[p++]; // i sai da fila for (int j = 0; j < N; ++j) if (A[i][j] == 1 && dist[j] >= N) { dist[j] = dist[i] + 1; fila[u++] = j; // j entra na fila } } }
É instrutivo reescrever o código sem os ++
:
#define N 100
int dist[N];
void distancias (int A[][N], int c) {
int fila[N], p, u;
for (int j = 0; j < N; j = j+1) dist[j] = N;
dist[c] = 0;
p = 0; u = 1; fila[0] = c;
while (p != u) {
int i = fila[p]; p = p+1;
for (j = 0; j < N; j = j+1)
if (A[i][j] == 1 && dist[j] >= N) {
dist[j] = dist[i] + 1;
fila[u] = j; u = u+1;
}
}
}