Crrs11 utworzono 5 lipca 2013 utworzono 5 lipca 2013 (edytowane) Witam. Napisałem przeszukiwanie BFS, program działa dobrze, ale koleś powiedział żebym 'switch' zmienił na 'if' próbowałem i nie wiem jak to zrobić. Proszę jeśli to możliwe o napisanie poprawnego warunku i o krotki opis warunku. [spoiler] #include <iostream> #include <queue> #include <list> #include <iomanip> #include <conio.h> #define n 9 using namespace std; class wezel { public: char znak; int ind; wezel(char znak, int ind); }; wezel::wezel(char _znak, int _ind) { znak = _znak; ind = _ind; } queue <wezel> odwiedzone; wezel R('R', 1); wezel V('V', 2); wezel S('S', 3); wezel W('W', 4); wezel T('T', 5); wezel X('X', 6); wezel U('U', 7); wezel Y('Y', 8); void pokaz_odwiedzone() { queue <wezel> odw = odwiedzone; cout<<"Odwiedzone: "; while(!odw.empty()) { cout << odw.front().znak << ' '; odw.pop(); } cout<<endl; } int pokaz_kolejke_iodwiedzone(queue<wezel> Q) { if(Q.empty()) {cout << "Q puste!" << endl; pokaz_odwiedzone(); return 0;} cout<<"Kolejka Q: "<< Q.front().znak <<' '; Q.pop(); while(!Q.empty()) { cout << Q.front().znak << ' '; Q.pop(); } cout << setw(20); pokaz_odwiedzone(); } void BFS(int G[n][n], wezel S) { queue<wezel> Q; bool O[n] = {false}; Q.push(S); while(!Q.empty()) { pokaz_kolejke_iodwiedzone(Q); S = Q.front(); Q.pop(); odwiedzone.push(S); O[S.ind] = true; for(int j = 0;j < n;++j) { if(G[j][S.ind] != 0 && O[j] == false) { [b]switch(j) { case 1:{ Q.push(R); O[j] = true; break; } case 2:{ Q.push(V); O[j] = true; break; } case 3:{ Q.push(S); O[j] = true; break; } case 4:{ Q.push(W); O[j] = true; break; } case 5:{ Q.push(T); O[j] = true; break; } case 6:{ Q.push(X); O[j] = true; break; } case 7:{ Q.push(U); O[j] = true; break; } case 8:{ Q.push(Y); O[j] = true; } }[/b] } } } pokaz_kolejke_iodwiedzone(Q); } int main() { int G[n][n] = { {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 1, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 1, 1, 0, 1}, {0, 0, 0, 0, 0, 1, 1, 1, 0} }; BFS(G,S); getch(); return 0; } [/spoiler] Wiem ze kod umieszczony niezgodnie z regulaminem ale nie mogę załapać jak ot zrobić z [*codebox]
rafalluz komentarz 5 lipca 2013 komentarz 5 lipca 2013 Przykład zamiany switch -> if: switch(x) { case 1: foo1(); break; case 2: foo2(); break; case 3: foo3(); break; default: foodefault(); break; } if(x==1) { foo1(); } else if(x==2) { foo2(); } else if(x==3) { foo3(); } else { foodefault(); } 1
Crrs11 komentarz 5 lipca 2013 Autor komentarz 5 lipca 2013 dzięki, takie proste a je nie wiedziałem :blush:
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.