Documente Academic
Documente Profesional
Documente Cultură
Teme:
Tema 1_portofoliu
o Fisa de lucru grafuri neorientate(de pe pbinfo.ro)
Tema 2_portofoliu
o Grafuri neorientate - Teste grila
Fisa de lucru grafuri neorientate(de pe
pbinfo.ro)
Graf complet:
3. Se dau două numere naturale n k. Considerăm graful complet cu n
noduri, etichetate de la 1 la n. Din acesta eliminăm toate muchiile
(i,j) cu proprietatea că i și j dau același rest la împărțirea cu k.Afișati
matricea de adiacență a grafului parțial obținut.
4. Graf partial 1:
Se dă lista muchiilor unui graf neorientat cu n vârfuri, etichetate de la
1 la n.Din acest graf se elimină toate muchiile cu o extremitate de
grad maxim și cealaltă extremitate de grad minim. Să se determine
numărul de muchii eliminate și să se afișeze matricea de adiacență a
grafului parțial obținut.
5. Graf partial 2:
Se dă lista muchiilor unui graf neorientat cu n vârfuri, etichetate de la
1 la n.Din acest graf se elimină toate muchiile cu o extremitate într-
un vârf de grad maxim. Să se determine numărul de muchii eliminate
și să se afișeze matricea de adiacență a grafului parțial obținut.
6. Bipartit:
Se dă lista muchiilor unui graf neorientat cu n vârfuri, etichetate de la
1 la n, precum si o mulțime A de vârfuri ale grafului. Considerăm
mulțimea B formată din vărfurile grafului care nu aparțin lui A. Să se
verifice dacă graful este bipartit peste partiția formată din mulțimile
A și B.
Rezolvare:
1. #include <fstream>
using namespace std;
ifstream f("graf_partial_5.in");
ofstream g("graf_partial_5.out");
int n, k, a[105][105], x, y;
void citire()
{
f >> n >> k;
while(f >> x >> y)
a[x][y] = a[y][x] = 1;
}
int grad_vf(int vf)
{
int grad = 0;
for(int i = 1; i <= n; i++)
if(a[vf][i])
grad++;
return grad;
}
int main()
{
citire();
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(a[i][j])
if(grad_vf(i) >= k && grad_vf(j) >= k)
a[i][j] = a[j][i] = 2;
2. #include<fstream>
using namespace std;
ifstream f("subgraf1.in");
ofstream g("subgraf1.out");
int n,a[105][105],c,mn=100000000;
void citire()
{
f>>n;
int x,y;
while(f>>x>>y)
a[x][y]=a[y][x]=1;
}
int grad(int nod)
{
int gr=0,i;
for (i=1;i<=n;i++)
gr+=a[nod][i];
return gr;
}
int main()
{
citire();
for (int i=1;i<=n;i++)
if(mn>grad(i))
mn=grad(i);
for (int i=1;i<=n;i++)
if(grad(i)==mn)
for (int j=1;j<=n;j++)
if(a[i][j]==1)
a[i][j]=0;
for (int i=1;i<=n;i++)
if (grad(i))
c++;
g< return 0;
}
3. #include <iostream>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
return 0;
}
4. #include <iostream>
#include <vector>
using namespace std;
const int N = 1005;
int n, m, grad[N];
bool adj[N][N];
void read()
{
cin >> n >> m;
int x, y;
for (int i = 1; i <= m; i++)
{
cin >> x >> y;
adj[x][y] = adj[y][x] = true;
grad[x]++;
grad[y]++;
}
}
int main()
{
read();
int cnt = 0;
for (int i = 1; i <= n; i++)
{
for (int j = i + 1; j <= n; j++)
{
if (adj[i][j] && (grad[i] == 1 || grad[j] == 1))
{
adj[i][j] = adj[j][i] = false;
cnt++;
}
}
}
cout << cnt << endl;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (adj[i][j])
cout << "1 ";
else
cout << "0 ";
}
cout << endl;
}
return 0;
}
5. #include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int nr_prim(int n)
{
int i,este_prim=1;
if(n==1){
return 0;
}
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
este_prim=0;
break;
}
}
return este_prim;
}
int main()
{
ifstream g("subgraf.in");
ofstream f("subgraf.out");
int n,i,j,a[101][101],nr_neprime[100],nr=0,s=0,M;
g>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
g>>a[i][j];
}
if(nr_prim(i)==0)
{
nr_neprime[nr]=i;
nr++;
}
}
for(i=0;i<nr;i++)
{
cout<<nr_neprime[i]<<" ";
}
for(i=0;i<nr;i++)
{
for(j=0;j<nr;j++)
{
s=s+a[nr_neprime[i]][nr_neprime[j]];
}
}
M=s/2;
f<<M;
return 0;
}
6. #include <iostream>
#include <vector>
using namespace std;
bool esteBipartit(int u) {
for (int i = 0; i < muchii[u].size(); i++) {
int v = muchii[u][i];
if (culoare[v] == culoare[u])
return false;
if (culoare[v] == -1) {
culoare[v] = 1 - culoare[u];
if (!esteBipartit(v))
return false;
}
}
return true;
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
muchii[x].push_back(y);
muchii[y].push_back(x);
}
for (int i = 1; i <= n; i++)
culoare[i] = -1;
culoare[1] = 0;
if (esteBipartit(1))
cout << "Graful este bipartit peste partitia formata din multimile
A si B." << endl;
else
cout << "Graful NU este bipartit peste partitia formata din
multimile A si B." << endl;
return 0;
}
4. V_56_I_5. Care este numarul maxim de varfuri izolate pe care le poate avea
un graf neorientat cu 8 noduri si 12 muchii?
a. 0 b. 2 c. 3 d. 1
5. V_27_I_2. Se considera graful neorientat din
figura alaturata.
Numarul maxim de muchii ce pot fi eliminate din
graf astfel incat graful partial rezultat sa fie
conex este:
a. 0 b. 1 c. 2 d. 3
a. 5 b. 2 c. 3 d. 4
a. 4 b. 0 c. 2 d. 3
22. V_81_I_2. Un graf neorientat si conex are n noduri si n-1muchii. Care este
numarul minim de muchii ce trebuie adaugate astfel incat sa se obtina un ciclu?
a. b. c. 0 d. 1
25. V_84_I_4. Se considera graful neorientat dat prin lista de muchii: (1,2),
(1,3), (3,4), (3,5), (3,6), (4,8), (4,7). Care este numarul
minim de muchii ce trebuie eliminate din graf astfel incat acesta sa nu mai fie
conex?
a. 3 b. nicio c. 2 d. 1
muchie
a. 4 b. 5 c. 2 d. 3
28. V_90_I_8. Fie un graf neorientat cu n=30 noduri si m=15muchii.
Numarul componentelor conexe pe care le poate avea acest graf este:
a. cel putin 1 si cel b. cel putin 10 si cel mult 15
mult 30
c. exact 15 d. cel putin 15 si cel mult 25
a. 1 b. 6 c. 3 d. 2
a. 4 b. 2 c. 1 d. 3
50. V_51_I_6. Care este numarul grafurilor partiale ale unui graf neorientat cu
n varfuri si m muchii ?
a. n! b. 2n c. m! d. 2m
55. V_14_I_1. Care este numarul maxim de componente conexe pe care le poate
avea un graf neorientat cu 6 noduri si 5 muchii?
a. 4 b. 2 c. 1 d. 3
Legenda:
“a/b/c/d” - raspuns corect