Clasa a XI-a lecția 19

From Algopedia
Jump to navigationJump to search

Graf eulerian

Definiție: Se numește graf eulerian un graf care conține un ciclu eulerian. Se numește ciclu eulerian un ciclu care conține toate muchiile grafului.

Exemplu: Graful următor este eulerian. Un ciclu eulerian este: [1,4,2,1,3,2,7,3,5,7,6,5,1] [1,4,2,1,3,2,7,3,5,7,6,5,1]

Teoremă: Un graf G = (X,U), fără vârfuri izolate, este eulerian dacă şi numai dacă este conex şi gradele tuturor vârfurilor sale sunt numere pare.

Euler

Se dă un graf neorientat cu n vârfuri care este conex și are gradele tuturor vârfurilor pare. Determinați un ciclu eulerian.

#include <fstream>

using namespace std;
ifstream in ("euler.in");
ofstream out("euler.out");

int n, a[1001][1001], v[1001], p;

void euler( int k ){
  for( int i = 1; i <= n; i ++ )        // parcurgem toate muchiile neselectate ce pornesc din nodul k
    if( a[k][i] == 1 ){
	  a[k][i] = a[i][k] = 0;            // marcam ca muchia ca si selectat
	  euler( i );                       
	}
	v[++p] = k;                         // salvam ordinea de vizitare a nodurilor
}

int main(){
  int i, j;
  in >> n;
  while( in >> i >> j )
    a[i][j] = a[j][i] = 1;
  euler( 1 );
  out << p << "\n";
  for(i = 1; i <= p; i++ )
    out << v[i] << " ";
  return 0;
}

Tema

usor

Medie

https://www.infoarena.ro/problema/fotbal2 ONI 2011, clasele 11-12 https://www.infoarena.ro/problema/biti