Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Seriale turcesti/coreene online H...

Merita un Termostat Smart pentru ...

Sfat achizitie MTB Devron Riddle

Problema mare cu parintii= nervi ...
 switch microtik

Permis categoria B la 17 ani

Sfaturi pentru pregatirea de eval...

Crapaturi placa
 cum imi accesez dosarul electroni...

Momentul Aprilie 1964

Sursa noua - zgomot ?

A fost lansat Ubuntu 24.04 LTS
 Pareri apartament in zona Berceni?

Free streaming SkyShowtime de la ...

Skoda Fabia 1.0 TSI (110 CP)- 19 ...

Mezina familiei, Merida BigNine
 

Circuite grafuri orientate

- - - - -
  • Please log in to reply
14 replies to this topic

#1
Oviro1

Oviro1

    New Member

  • Grup: Junior Members
  • Posts: 23
  • Înscris: 19.02.2017
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
Oviro1

Oviro1

    New Member

  • Grup: Junior Members
  • Posts: 23
  • Înscris: 19.02.2017
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 Oviro1, on 23 februarie 2017 - 20:01, said:

Pai stiu ca e un algoritm de parcurgere, e recursiv si ii stiu si drumul(adica la ce noduri se duce)
Perfect. Acum vino cu codul care parcurge in DFS un graf.

#5
Oviro1

Oviro1

    New Member

  • Grup: Junior Members
  • Posts: 23
  • Înscris: 19.02.2017
#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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Perfect. Si il intelegi cu adevarat? Arata-mi liniile din cod care cauzeaza "intoarcerea din adancurile recursivitatii".

#7
Oviro1

Oviro1

    New Member

  • Grup: Junior Members
  • Posts: 23
  • Înscris: 19.02.2017
if(a[X][i] == 1 && v[i] == 0)
   dfs(i);



#8
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 Oviro1, on 23 februarie 2017 - 20:42, said:

if(a[X][i] == 1 && v[i] == 0)
dfs(i);

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?

#9
Oviro1

Oviro1

    New Member

  • Grup: Junior Members
  • Posts: 23
  • Înscris: 19.02.2017

 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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 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
Oviro1

Oviro1

    New Member

  • Grup: Junior Members
  • Posts: 23
  • Înscris: 19.02.2017
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 Posted Image)

A si ca sa aflu circuitele ar trebuie sa fac dfs pt fiecare nod :D

Edited by Oviro1, 23 February 2017 - 22:53.


#12
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
Oviro1

Oviro1

    New Member

  • Grup: Junior Members
  • Posts: 23
  • Înscris: 19.02.2017
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
Oviro1

Oviro1

    New Member

  • Grup: Junior Members
  • Posts: 23
  • Înscris: 19.02.2017

 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 :D

#15
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
invata sa le dai variabilelor un nume mai sugestiv

Anunturi

Neurochirurgie minim invazivă 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

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate