Eu perdi 3 dias
finalmente resolvi uma questão gráfica
usada para
encontrar a menor distância
usando o BFS
Deseja compartilhar a experiência.
When the (undirected for me) graph has
fixed distance (1, 6, etc.) for edges
#1
We can use BFS to find shortest path simply by traversing it
then, if required, multiply with fixed distance (1, 6, etc.)
#2
As noted above
with BFS
the very 1st time an adjacent node is reached, it is shortest path
#3
It does not matter what queue you use
deque/queue(c++) or
your own queue implementation (in c language)
A circular queue is unnecessary
#4
Number of elements required for queue is N+1 at most, which I used
(dint check if N works)
here, N is V, number of vertices.
#5
Wikipedia BFS will work, and is sufficient.
https://en.wikipedia.org/wiki/Breadth-first_search#Pseudocode
Perdi três dias tentando todas as alternativas acima, verificando e revendo novamente e novamente acima,
elas não são o problema.
(Tente gastar tempo procurando outros problemas, se não encontrar nenhum problema acima de 5).
Mais explicações do comentário abaixo:
A
/ \
B C
/\ /\
D E F G
Suponha que acima é o seu gráfico
seja descendente.
Para A, os adjacentes são B e C.
Para B, os adjacentes são D e E.
Para C, os adjacentes são F e G
digamos, o nó inicial é A
quando você alcança A, para, B e C, a menor distância entre B e C de A é 1
quando você alcança D ou E, através de B, a distância mais curta de A e D é 2 (A-> B-> D)
da mesma forma, A-> E é 2 (A-> B-> E)
também, A-> F & A-> G é 2
Portanto, agora, em vez de 1 distância entre nós, se for 6, basta multiplicar a resposta por 6
exemplo,
se a distância entre cada um for 1, então A-> E é 2 (A-> B-> E = 1 + 1 )
se a distância entre cada um é 6, então A-> E é 12 (A-> B-> E = 6 + 6)
sim, o bfs pode seguir qualquer caminho
mas estamos calculando para todos os caminhos
se você tem que ir de A a Z, então nós viajamos todos os caminhos de A a um intermediário I, e uma vez que haverá muitos caminhos que descartar tudo, mas caminho mais curto até que eu, em seguida, continuar com o caminho mais curto à frente para o próximo nó J
novamente se existem vários caminhos de I a J, tomamos apenas o menor
exemplo,
suponha,
A -> eu temos a distância 5
(STEP) assuma, I -> J temos vários caminhos, das distâncias 7 e 8, já que 7 é o menor
tomamos A -> J como 5 (A-> eu menor) + 8 (menor agora) = 13,
então A-> J é agora 13
, repetimos agora acima (STEP) para J -> K e assim por diante, até chegarmos para Z
Leia esta parte, 2 ou 3 vezes, e desenhe no papel, você certamente entenderá o que estou dizendo, boa sorte