Neurochirurgie minim invazivă
"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv. Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice. www.neurohope.ro |
Circuite grafuri orientate
Last Updated: Feb 24 2017 23:32, Started by
Oviro1
, Feb 23 2017 19:32
·
0
#1
Posted 23 February 2017 - 19:32
Cum as putea afla un circuit intr-un graf orientat?
Vreau doar niste explicatii, nu codul in sine. Multumesc . (Se numește drum într-un graf orientat o secvență de vârfuri (x1, x2,..., xp), astfel încât pentru oricare două vârfuri consecutive xi și xi+1 există arcul (xi, xi+1). Drumul se numește elementar dacă nu conține de mai multe ori același vârf. Drumul se numește simplu dacă nu conține de mai multe ori același vârf. Se numește circuit un drum simplu pentru care extremitatea inițială coincide cu extremitatea finală. Circuitul se numește elementar dacă nu conține de mai multe ori același vârf (exceptând extremitățile sale).) |
#2
Posted 23 February 2017 - 19:36
Principiu de baza: cand inveti o structura de date (aici grafuri), inveti mai intai si mai intai modurile de constructie programatica a ei, modurile de iterare a ei, si modurile de distrugere a ei.
Abia apoi incepi sa iti pui intrebari despre alti algoritmi conecsi. Deci: ce nu stii despre DFS? |
#3
Posted 23 February 2017 - 20:01
Pai stiu ca e un algoritm de parcurgere, e recursiv si ii stiu si drumul(adica la ce noduri se duce)
Edited by Oviro1, 23 February 2017 - 20:01. |
#4
Posted 23 February 2017 - 20:03
#5
Posted 23 February 2017 - 20:18
#include <iostream> #include <fstream> using namespace std; ifstream fin("asd.in"); ofstream fout("asd.out"); int n , a[100][100], v[100]; void dfs(int X) { fout << X << " "; v[X] = 1; for(int i =1 ; i <= n ; ++i) if(a[X][i] == 1 && v[i] == 0) dfs(i); } int main() { int i , j , m, X; fin >> n >>m>>X; while(fin>>i>>j) { fin >> i >> j; a[i][j] = 1;//a[j][i]=1; } dfs(X); return 0; } |
#6
Posted 23 February 2017 - 20:36
Perfect. Si il intelegi cu adevarat? Arata-mi liniile din cod care cauzeaza "intoarcerea din adancurile recursivitatii".
|
#8
Posted 23 February 2017 - 21:04
#9
Posted 23 February 2017 - 21:20
OriginalCopy, on 23 februarie 2017 - 21:04, said:
Hai sa invatam sa citim cod: daca (o conditie e adevarata) atunci: apeleaza-ma pe mine insumi inca o data Deci, ramura atunci ce face? Determina intrarea in recursivitate, sau iesirea din ea? omg inseamna ca sunt pe langa rau mda deci aia e intrarea in recursivitatea, si iesirea e fout << X << " "; v[X] = 1;? btw, Multumesc mult ca m-ai ajutat pana acum! Edited by Oviro1, 23 February 2017 - 21:23. |
#10
Posted 23 February 2017 - 21:43
Oviro1, on 23 februarie 2017 - 21:20, said:
omg inseamna ca sunt pe langa rau mda deci aia e intrarea in recursivitatea, si iesirea e fout << X << " "; v[X] = 1;? btw, Multumesc mult ca m-ai ajutat pana acum! Bun, bun, deci esti conectat mental la problema. Acum fa un pas inapoi si analizeaza ce faci de fapt. Deseneaza un graf pe hartie, si ruleaza DFS pe el, in minte, cu ajutorul unui tabel in care retii valorile tuturor variabilelor importante din algoritm. Fa asta cu cateva grafuri. Apoi gandeste-te cum te-ai putea folosi de DFS pentru a detecta cand ai dat de inceputul unui ciclu: de un nod pe care l-ai vazut deja... Ca in povestea aia cu Hansel si Gretel. Stii povestea? Ei exact aia vei face, vei pune o dara de firmituri in urma ta, pe unde treci (in drumul tau spre adancurile recursivitatii). PS: nu ti-am citit codul, e cod de liceu greu de citit pentru programatori. Plec de la premiza ca DFS-ul tau functioneaza corect, dar ce-am scris e gandindu-ma la o implementare curata de DFS. |
|
#11
Posted 23 February 2017 - 22:44
Lol chiar era ceva gresit, am pus fin>>i>>j in while-ul in care facea deja asta, nu stiam de ce nu-mi da drumul corect. Si nu stiam de ce nu-mi da drumul ca pe hartie. Mersi mult inca o data )
A si ca sa aflu circuitele ar trebuie sa fac dfs pt fiecare nod Edited by Oviro1, 23 February 2017 - 22:53. |
#12
Posted 24 February 2017 - 20:33
Bun, bun. Acum poti trece la next level: citirea si intelegerea unui paper stiintific: http://www.cs.tufts..../Johnson 75.PDF
Algoritmul e destul de clar documentat. |
#13
Posted 24 February 2017 - 21:26
Gata, am aflat toate circuitele. Multumesc mult!
#include <iostream> #include <fstream> using namespace std; ifstream fin("asd.in"); ofstream fout("asd.out"); int i,j,v[100],a[100][100],n,x,m,k; void DFS(int x){ fout<<x<<" "; v[x] = 1; for (int i=1;i<=n;i++) if(a[x][i] == 1 && v[i] == 0) DFS(i); } int main() { fin>>n>>m; while (fin>>i>>j) a[i][j] = 1; for (x=1;x<=n;x++){ DFS(x); fout<<endl; for (int i=1;i<=n;i++) v[i] = 0;} } |
#14
Posted 24 February 2017 - 21:58
Oviro1, on 24 februarie 2017 - 21:26, said:
Gata, am aflat toate circuitele. Multumesc mult! #include <iostream> #include <fstream> using namespace std; ifstream fin("asd.in"); ofstream fout("asd.out"); int i,j,v[100],a[100][100],n,x,m,k; void DFS(int x){ fout<<x<<" "; v[x] = 1; for (int i=1;i<=n;i++) if(a[x][i] == 1 && v[i] == 0) DFS(i); } int main() { fin>>n>>m; while (fin>>i>>j) a[i][j] = 1; for (x=1;x<=n;x++){ DFS(x); fout<<endl; for (int i=1;i<=n;i++) v[i] = 0;} } Nu mai pot da edit, nu vazusem ca ai mai pus un post. Acum ma uit |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users