[c++]BFS znajdowanie najkrótszej drogi

0

napisałem następującą funkcje znajdowania najkrótszej drogi za pomocą BFS niestety wywala następujący błąd:
175 C:\Dev-Cpp\proba.cpp non-lvalue in assignment
chodzi o linijkę:
while(!V[x]=1)

void path(int FS[][5], int V[], int i, int n, int x)
{
     int dist=0; 
     queue<int> kolejka;
     V[x]=0;
     //wyzeruj wszystkie punkty reprezentujące odwiedzone wierzchołki
     for (int j=0; j<n; j++) { V[j]=0; }
   
     //wstawia do kolejki pierwszy element
     kolejka.push(i);
 
     int s;

     
     //wykonuj dopóki V[x] nieodwiedzony
     while(!V[x]=1)
     {
         s=kolejka.front();
         kolejka.pop();
         
         //oznacza ten wierzchołek jako odwiedzony
         V[s] = 1;
         
         //wykonuj pętlę tyle razy ile jest wierzchołków
         for(int k=0; k<n; k++)
         {
                 dist=dist+1;
                 //jeśli punkt sąsiedztwa ustawiony na 1
                 //to znaleziono połączenie między wierzchołkami
                 if (FS[s][k]!=0)
                 {
                      //sprawdź kolejny wierzchołek jeśli nie był dotąd odwiedzany
                      if(V[k]==0)
                      {
                           //oznacz jako odwiedzony
                           V[k]=1;
                           //wstaw do kolejki
                           kolejka.push(k);
                      }
                 }
         }
     }
     cout<<dist<<endl;
}
0

W problematycznej linijce, w warunku pętli masz przypisanie (=), a zapewne chodziło Ci o porównanie (==). Czy może raczej o operator różności. Możesz to zapisać albo tak (z operatorem równości):

while (! (V[x] == 1 ) )

albo którymś z tych sposobów:

while (V[x] == 0)

while (V[x] != 1)

while (!V[x])
0

Zamiast == daj != ;)

0

@t0m_k:
Jeszcze przed przeczytaniem Twojego komentarza zacząłem edytować post i pisać różne sposoby porównania, ale myślę, że to w sumie zbędne. Skoro gość pisze algorytm grafowy, to chyba zna podstawowe zasady programowania strukturalnego. Również operatory logiczne i arytmetyczne. Podejrzewam, że to była zwykła literówka i że po jej wskazaniu autor sam sobie poradzi. Można użyć zresztą i operatora równości (==) tak jak napisałem to wyżej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1