23
Str ăzile Elevi: -Bălțoi Ion Costel Marius -Voitecovits Ionuț-Ciprian Colegiul Național “Ecaterina Teodoroiu” Profesor îndrumător: Ohotă Eugenia-Maria

Str ă zile

  • Upload
    nikkos

  • View
    59

  • Download
    4

Embed Size (px)

DESCRIPTION

Str ă zile. Elevi : - B ălțoi Ion Costel Marius -Voitecovits Ionuț-Ciprian Colegiul Național “ Ecaterina Teodoroiu ” Profesor îndrumător : Ohotă Eugenia-Maria. - PowerPoint PPT Presentation

Citation preview

Străzile

Elevi: -Bălțoi Ion Costel Marius -Voitecovits Ionuț-CiprianColegiul Național “Ecaterina Teodoroiu”Profesor îndrumător: Ohotă Eugenia-Maria

Ca în fiecare primăvară, autorităţile locale ale oraşului Târgu- Jiu au declanşat diverse acţiuni edilitare şi de curăţenie specifice acestui sezon. Imediat după ce zăpada s-a topit au fost declanşate acţiuni de curăţenie în special în zona centrală a oraşului şi a parcurilor.

De asemenea, autoritaţile locale au fost preocupate şi de întreţinerea şi modernizarea străzilor din oraş. Pentru efectuarea lucrărilor la străzi, Primăria ia hotărârea de a organiza o licitaţie prin care să atribuie aceste lucrări unei firme private.

După desfaşurarea licitaţiei pentru modernizarea drumurilor din localitate,

aceasta este caştigată de SC.BV Construct.SA, care se angajează ca în termen de 60 zile să

termine toate lucrările.

Înainte de începerea lucrărilor, constructorii s-au gândit cum le este mai uşor să modernizeze străzile, dar nu ştiau

nicio idee care să le uşurezemunca de organizare a şantierului!... Peste

ceva timp, un inginer îşi aminteşte că reţeaua de străzi seamănă cu grafurile

orientate de la informatică!... De aici, totul a devenit din ce în ce mai simplu!

Pentru început, constructorii au ales sa înveţe câte ceva despre grafuri pentru a-şi uşura munca pe şantier!

Se numește graf(G) o pereche ordonată de mulțimi(X,U) unde X este o mulțime finită și nevidă, iar U o mulțime de perechi formate cu elemente distincte din mulțimea X. Un graf G=(X,U) este un graf neorientat dacă mulțimea U are proprietatea de simetrie. Mulțimea U este formată din perechi neodronate { , }. Un graf G=(X,U) este un graf orientat daca mulțimea U nu are proprietatea de simetrie. Mulțimea U este formată din perechi ordonate { , }.

Numim noduri adiacente orice pereche de noduri care formează o muchie –{ , } U. Fiecare dintre cele două noduri si este nod incident cu muchia =[ , ]. Nodurile vecine unui nod sunt toate nodurile care sunt adiacente cu el. Nodurile si sunt extremitățile arcului []. Nodul este extremitatea inițială a arcului, iar nodul este extremitatea finală a arcului.

Gradul unui nod al grafului G este egal cu numărul muchiilor(arcelor) incidente cu nodul și se notează cu d(). Gradul intern al unui nod al grafului G este egal cu numărul arcelor care intră in nodul . Gradul extern al unui nod al grafului G este egal cu numărul arcelor care ies din nodul . Se numește nod terminal un nod care are suma gradelor egală cu 1. Se numește nod izolat un nod care are suma gradelor egală cu 0.

Se numește succesor al nodului xi orice nod la care ajunge un arc care iese din nodul xi. Mulțimea succesorilor nodului xi este formată din mulțimea nodurilor la care ajung arcele care ies din nodul xi. Se numește predecesor al nodului orice nod de la care intra un arc în nodul . Mulțimea predecesorilor nodului este formată din mulțimea nodurilor de la care ajung arcele care intră în nodul .

Reprezentarea și implementarea grafului:- Matricea de adiacență a unui graf cu n noduri se defineste astfel: a[i][j]=1, daca exista muchie/arc de la nodul i la nodul j; a[i][j]=0, daca nu exista muchie/arc de la nodul i la nodul j.- Matricea de incidență a unui graf orientat cu n noduri se defineste astfel: a[i][j]=-1. daca nodul i este extremitate initiala; a[i][j]=1, daca nodul i este extremitate finala; a[i][j]=0, daca nu exista muchie intre cele 2 noduri.- Vectorul de arce al unui graf este format din m elemente care conțin, fiecare, câte o pereche de două noduri, și care formează o muchie, adică pentru care [ ,] U.- Lista de adiacență este formata din listele ≤i ≤n) care contin toti vecinii unui nod la care se poate ajunge direct din nodul , adica toate nodurile pentru pentru care , ] U.

Constructorii au folosit grafurile si teoria grafurilor pentru:

1) Reprezentarea reţelei de străzi;2) Intersecţiile la care nu se poate ajunge

din nicio altă intersecţie;3) Intersecţiile la care se poate ajunge

direct din cele mai multe intersecţii;4) Intersecţiile de la care se poate ajunge

direct în cele mai multe intersecţii;5) Numărul de străzi pe care se circulă în

ambele sensuri;6) Numărul de intersecţii mici, mari şi

foarte mari;

7) Numărul panourilor cu semne pentru prioritate ce se vor folosii;8) Numărul panourilor cu semne pentru interzicerea circulaţiei ce se vor folosi;9) Numărul de semafoare care se vor monta;10) Reprezentarea străzilor care sunt încă în uz;11) Reprezentarea retelei de strazi in urma

inchiderii anumitor intersectii.

1) Reprezentarea reţelei de străzi ce urmează a fi modernizată. Pentru aceasta, ei au hotărât să utilizeze vectorul de arce deoarece au considerat

că este mai uşor să noteze nodurile unde încep şi se termină străzile.

{(1,2),(1,7),(2,3),(3,4),(3,5),(5,6),(5,7),(6,1)(6,3),(7,1)}

2) Intersecţiile la care nu se poate ajunge din nicio altă intersecţie

Pentru a determina intersecţiile la care nu se

poate ajunge din nicio altă intersecţie,

constructorii aleg să determine toate nodurile care nu au predecesori -

nodurile cu grad intern 0.

-Funcţia grad_i(int i) se foloseşte pentru

calcularea gradului intern al nodului i;

#include <iostream.h>struct { int x,y;} v[100];int n,m;void citire(){for (int i=1;i<=m;i++) cin>>v[i].x>>v[i].y;}int grad_i( int t){ int s=0,i;for (i=1;i<=m;i++) if(v[i].y==t) s++;return s;}int main(){cin>>n>>m; citire();int i;for(i=1;i<=n;i++)if (grad_i(i)==0) cout<<i<<" ";}

3) Intersecţii la care se poate ajunge direct din cele mai multe intersecţii

Pentru a determina intersecțiile la care se poate

direct din cele mai multe intersecții se determină

nodurile care au au gradul intern maxim.

Cu ajutorul funcţiei grad_i(int t) se calculează gradul intern al nodului t.

#include <iostream.h>struct { int x,y;} v[100];int n,m;void citire(){for (int i=1;i<=m;i++) cin>>v[i].x>>v[i].y;}int grad_i( int t){ int s=0,i;for (i=1;i<=m;i++) if(v[i].y==t) s++;return s;}int main(){cin>>n>>m; citire();int i, max=-1;for(i=1;i<=n;i++) { int x=grad_i(i); if (max<x) max=x;}for(i=1;i<=n;i++){ int x=grad_i(i); if (max==x) cout<<i<<" ";}}

3) Intersecţiile de la care se poate ajunge direct din cele mai multe intersecţii

Pentru a determina intersecțiile din care se poate ajunge direct la

cele mai multe intersecții se determină nodurile care au gradul

extern maxim.

Functia grad_e(int t) calculeaza gradul

extern al nodului t.

#include <iostream.h>struct { int x,y;} v[100];int n,m;void citire(){for (int i=1;i<=m;i++) cin>>v[i].x>>v[i].y;}int grad_e( int t){ int s=0,i;for (i=1;i<=m;i++) if(v[i].x==t) s++;return s;}int main(){cin>>n>>m; citire();int i,max=-1;for(i=1;i<=n;i++){ int x=grad_e(i); if (max<x) max=x;}for(i=1;i<=n;i++){ int x=grad_e(i); if (max==x) cout<<i<<“ “;}}

4) Numărul de străzi pe care se circulă in ambele sensuri

Se determină numărul de perechi de noduri i și j

pentu care, în matricea de adiacență, elementele a[i]

[j] și a[j][i] sunt egale cu 1.

Programul transformă vectorul de arce în matrice

de adiacenţă, după care verifică dacă există arce de la nodul i la j si de la nodul

j la i.

Variabilele x si y retin nodurile extremitate

initiale si extremitate finala a unui arc, apoi se modifica in matricea de adiacenta.

#include <iostream>struct arc { int x, y; } v[100]; int a[100][100],n,m;int main(){int x, y;cin>>n>>m;for(int i=1; i<=m; i++) cin>>v[i].x>>v[i].y;for(i=1; i<=m; i++) {x = v[i].x; y = v[i].y; a[x][y] = 1;}for(i=1; i<=n; i++) for(j=1; j<=n; j++) if (a[i][j]==1 && a[j][i]==1) cout<<i<<“ “;}

5) Numărul de intersecţii mici, mari si foarte mari

#include <iostream.h>struct { int x,y;} v[100];int n,m;void citire(){for (int i=1;i<=m;i++) cin>>v[i].x>>v[i].y;}int grad_i( int t){ int s1=0,i;for (i=1;i<=m;i++) if(v[i].y==t) s1++;return s1;}

Se află gradul intern si gradul extern al unui nod,

dupa care se calculeaza numarul nodurilor

adiacente cu un nod i.

int grad_e( int t){ int s2=0,i;for (i=1;i<=m;i++) if(v[i].x==t) s2++;return s2;}int main(){int a=0,b=0,c=0;cin>>n>>m; citire();for (i=1;i<=n;i++) if (grad_i(i)+grad_e(i)<4) a++; else if (grad_i(i)+grad_e(i)<=6) b++; else if (grad_i(i)+grad_e(i)>6) c++;cout<<a<<“ intersectii mici”<<endl;cout<<b<<“ intersectii mari”<<endl;cout<<c<<“ intersectii foarte mari”;}

6) Numărul panourilor cu semne pentru prioritate ce se vor folosi

Panourile cu semne de prioritate se vor instala, în general, la sfârșitul anumitor străzi, deci se va calcula gradul intern al unui nod i, apoi se realizează suma panourilor necesare pentru fiecare stradă.

#include <iostream.h>struct { int x,y;} v[100];int n,m;void citire(){for (int i=1;i<=m;i++) cin>>v[i].x>>v[i].y;}int grad_i( int t){ int s1=0,i;for (i=1;i<=m;i++) if(v[i].y==t) s1++;return s1;}int main(){cin>>n>>m; citire();int i,s=0;for(i=1;i<=n;i++) s+=grad_i(i);cout<<s<<" ";}

7) Numărul panourilor cu semne pentru interzicerea circulaţiei ce vor fi folosite

Panourile cu semne pentru interzicerea circulației se vor instala, în general, la intrarea pe anumite străzi, deci se va calcula gradul extern al unui nod i, apoi se realizează suma panourilor necesare pentru fiecare stradă.

#include <iostream.h>struct { int x,y;} v[100];int n,m;void citire(){for (int i=1;i<=m;i++) cin>>v[i].x>>v[i].y;}int grad_i( int t){ int s1=0,i;for (i=1;i<=m;i++) if(v[i].x==t)s1++;return s1;}int main(){cin>>n>>m; citire();int i,s=0;for(i=1;i<=n;i++) s+=grad_e(i);cout<<s<<" ";}

8) Numărul de semafoare ce se vor monta

Semafoarele se vor instala în intersecțiile unde există 3 sau

mai multe străzi.Pentru determinarea

numărului de semafoare necesar, se realizează suma

gradelor interne ale nodurilor care au peste 2 noduri

adiacente.

#include <iostream.h>struct { int x,y;} v[100];int n,m;void citire(){for (int i=1;i<=m;i++) cin>>v[i].x>>v[i].y;}int grad_i( int t){ int s=0,i;for (i=1;i<=m;i++) if(v[i].y==t) s++;return s;}int main(){cin>>n>>m; citire();int i,s=0;for(int i=1;i<=n;i++) if (grad_i(i)>2) s+=grad_i(i);cout<<s<<" ";}

10) Determinarea unui graf parţial al grafului iniţial

După repetatele deszăpeziri si inundatii din această iarnă, unele străzi si poduri s-au

degradat în asemenea masură încât nu mai sunt adecvate

circulației ,drept pentru care s-au închis.

Constructorii trebuie sa reprezinte reteaua de strazi dupa

inchiderea anumitor strazi.

Un graf parțial al grafului G este el însuși sau un graf care s-a obținut prin eliminarea unor muchii(arce)

din graful G.

#include <iostream.h>int a[100][100], n, m ,t;struct muchii{int x,y;} v[100];void citire(){for (int i=1;i<=m;i++)

{cin>>v[i].x>>v[i].y;a[v[i].x][v[i].y]=1;}}

void elimina(int x,int y){if (a[x][y]==1) a[x][y]=0;}void scrie(){for (int i=1;i<=n;i++)

{for (int j=1;j<=n;j++)cout<<a[i][j]<<" ";

cout<<endl;}}int main(){citire();int x,y;cin>>n>>m>>t;for (int k=1;k<=t;k++){cin>>x>>y;elimina(x,y);}scrie();}

n – numărul de intersecţiim – numărul de străzi

t – numărul de străzi ce vor fi închise

În subprogramul citire() se realizeaza citirea vectorului de muchii și transformarea vectorului de muchii în matrice de adiacență.

Subprogramul elimina(int x, int y) realizează eliminarea unei muchii care are extremitate iniţială nodul x şi extremitate finală- nodul y.

Cu ajutorul subprogramului scrie() se afişeaza matricea de adiacență a grafului parţial.

În programul principal, se citesc cele t perechi de noduri care reprezintă extremitățile muchiilor, apoi se apelează subprogramul

elimina(int x. int y).

11) Determinarea unui subgraf al grafului

reprezentând rețeaua de străzi

Unele intersecții vor fi dezafectate deoarece în urma unor studii,

s-a constatat ca este eficient ca în acele locații să se construiască anumite

edificii, fiind nevoie deo refluidizare a traficului.

Un subgraf al grafului G este el însuși sau un graf care s-a obșinut prin

suprimarea din graful G a unor noduri și a tuturor muchiilor(arcelor)

incidente cu aceste noduri.

#include<iostream.h>struct {int x,y;} v[100];int c[100][100],n,m,x,y,t,s[10];void citire(){for (int i=1;i<=m;i++) cin>>v[i].x>>v[i].y;for (int k=1;k<=t;k++) cin>>s[k];}void transf(){for(int i=1; i<=m; i++) {x = v[i].x; y = v[i].y; c[x][y] = 1;}}void subgraf(){for (int k=1;k<=t;k++)for (int i=1;i<=n;i++) if (i==s[k]) for (int j=1;j<=n;j++) { c[i][j]=0; c[j][i]=0;}}void scrie(){for (int i=1;i<=n;i++) {for (int j=1;j<=n;j++) cout<<c[i][j]<<" ";

cout<<endl;}}int main() {cin>>n>>m>>t;for (int k=1;k<=t;k++) cin>>s[k];citire(); transf(); subgraf(); scrie();}

n – numărul de intersecțiim – numărul de străzit – numărul de intersecții ce urmează a fi închiseVectorul s[10] memorează intersecțiile ce urmează a fi închise.În subprogramul citire(), se vor citii intersecțiile care sunt capete de străzi și intersecțiile ce se vor închide.Subprogramul transf() transformă vectorul de arce în matrice de adiacență.În subprogramul subgraf() se parcurge vectorul în care sunt memorate intersecțiile ce vor fi închise, apoi se parcurg cele n noduri din matricea de adiacență; arcele se vor elimina prin inițializarea elementelor c[i][j] și c[j][i] cu 0.Subprogramul scrie() afșează matricea de adiacență a subgrafului.

În ultimele zile rămase pâna la expirarea termenului de execuţie a lucrărilor, Primăria

împreună cu constructorul se gândesc sa demareze un proiect prin care să promoveze deplasarea cu ajutorul mijloacelor de transport ecologice care

afecteaza într-o mai mică măsura calitatea drumurilor și influențează pozitiv sănătatea

oamenilor.