Professional Documents
Culture Documents
BOGDAN
BOGDAN
struct nod
{
int val;
nod* urm;
}*g[max];
if(!l[x])
l[x]=c;
else
{
p=l[x];
while(p->urm)
p=p->urm;
p->urm=c;
}
}
void citire()
{
cout<<"Dati n= ";
cin>>n;
cout<<"Dati k= ";
cin>>k;
int a=1,b=1;
while(a && b)
{
add(a,b,g);
add(b,a,g);
gr[a]++;
gr[b]++; //incrementam gradele
cin>>a>>b;
}
}
for(i=1;i<=nr;i++)
{
cout<<i<<": ";
p=l[i];
while(p)
{
cout<<p->val<<" ";
p=p->urm;
}
cout<<"\n";
}
}
for(i=1;i<=n;i++)
{
c=l[i];
while(c)
{
if(!el[i] && c->val==x)
grad++;
c=c->urm;
}
}
return grad;
}
int elimin()
{
int ok=1, nr=n,i;
while(ok && nr>0)
{
for(i=1;i<=n;i++)
if(grade(i,g)<k)
{
el[i]=1;
ok=0;
nr--;
}
}
if(nr>0)
return 1;
return 0;
}
int i;
nod* p;
for(i=1;i<=n;i++)
{
if(!el[i])
{
cout<<i<<": ";
p=l[i];
while(p)
{
if(!el[p->val])
cout<<p->val<<" ";
p=p->urm;
}
cout<<"\n";
}
}
int main()
{
clrscr();
citire();
afis(g,n);
if(!elimin())
cout<<"Nu exista solutii";
else
afis_subgraf(g);
/* nodurile necorespunzatoare sunt sterse doar la nivel
logic (el[max])
return 0;
}
TEMA 2_2A
#include<iostream.h>
#include<conio.h>
#define max 100
int n,m;
struct nod
{
int val;
nod* urm;
}*l[max];
if(!l[x])
l[x]=c;
else
{
p=l[x];
while(p->urm)
p=p->urm;
p->urm=c;
}
}
p=l[x];
while(p)
{
if(p->val==y)
return 1;
p=p->urm;
}
return 0;
}
int citire()
{
cout<<"Dati n= ";
cin>>n;
int a,b;
while(a && b)
{
add(a,b);
add(b,a);
cin>>a>>b;
}
cout<<"Dati nr de noduri ale grafului partial: ";
cin>>m;
if(n!=m)
return 0;
cout<<"Dati muchiile lui G1: (terminati cu 0)\n";
cin>>a>>b;
while(a && b)
{
if(!ok(a,b))
return 0;
cin>>a>>b;
}
return 1;
}
int main()
{
clrscr();
if(!citire())
cout<<"Graful dat nu poate fi un graf partial al lui G";
else
cout<<"Totul e ok";
getch();
return 0;
}
..............
..............
.............
.............
TEMA 2_2B
LAAAAAAAAAAAAB 3333333333333333333
#include<iostream.h>
#include<conio.h>
#define max 100
int n,aux[max];
struct nod
{
int val;
nod* urm;
}*l[max];
if(!l[x])
{
c->urm=NULL;
l[x]=c;
}
else
{
c->urm=l[x];
l[x]=c;
}
}
void citire()
{
cout<<"Dati n= ";
cin>>n;
int a,b;
cout<<"Dati muchiile (opriti cu 0)\n";
cin>>a>>b;
while(a && b)
{
add(a,b);
add(b,a);
cin>>a>>b;
}
}
void afis()
{
int i;
nod*p;
for(i=1;i<=n;i++)
{
cout<<i<<": ";
p=l[i];
while(p)
{
cout<<p->val<<" ";
p=p->urm;
}
cout<<"\n";
}
}
while(a && b)
{
if(!aux[a]|| !aux[b])
{
cout<<"Muchia nu poate exista in G1\n";
return 0;
}
if(!ok(a,b))
return 0;
cin>>a>>b;
}
return 1;
}
int main()
{
clrscr();
citire();
afis();
if(!citire_sgrf())
cout<<"Graful dat nu poate fi subgraf al lui G ";
else
cout<<"Totul e ok";
getch();
return 0;
}
TEMA 2_2C
.
.
.
.
..
.
.
.
.
.
#include<iostream.h>
#include<conio.h>
#define max 100
int n,p,m;
struct nod
{
int val;
nod* urm;
}*g[max],*g1[max];
if(!l[x])
{
c->urm=NULL;
l[x]=c;
}
else
{
c->urm=l[x];
l[x]=c;
}
}
void citire()
{
cout<<"Dati n= ";
cin>>n;
int a,b;
cout<<"Dati muchiile (opriti cu 0)\n";
cin>>a>>b;
while(a && b)
{
add(a,b,g);
add(b,a,g);
cin>>a>>b;
}
cout<<"Dati p= ", cin>>p;
}
void constr()
{
nod* c;
for(int i=1;i<=p;i++)
{
c=g[i];
while(c)
{
if(i<=p && c->val<=p)
add(i,c->val,g1);
c=c->urm;
}
}
}
int main()
{
clrscr();
citire();
constr();
afis(g,n);
cout<<"\nG1:\n";
afis(g1,p);
getch();
return 0;
}
........................................................
Tema 2-Lab 4
PB 1
#include<stdio.h>
#include<conio.h>
#define max 100
void citire()
{
freopen("matrice.txt","r",stdin);
scanf("%d%d%d",&n,&v1,&v2);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d", &a[i][j]);
}
void afis()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
void copiaza(int x)
{
kmax=x;
for(int i=1;i<=x;i++)
st2[i]=st[i];
}
void back(int k)
{
if(st[k-1]==v2 && (k-1)>kmax)
copiaza(k-1);
for(int i=1;i<=n;i++)
{
if(ok(i,k))
{
st[k]=i;
back(k+1);
}
}
}
int main()
{
clrscr();
citire();
afis();
st[1]=1;
back(2);
for(int i=1;i<=kmax;i++)
printf("%d ",st2[i]);
return 0;
}
............///////////////////////////////////////////////////////////////////////
/
Pb 2
#include<stdio.h>
#include<conio.h>
#define max 100
void citire()
{
printf("Dati n(numarul de varfuri), m(numarul de muchii), v1(extremitatea 1),
v2 (extremitatea 2)\n");
scanf("%d%d%d%d",&n,&m,&v1,&v2);
int a1,b1;
printf("Dati muchia: ");
for(int i=1;i<=m;i++)
{
printf("%d: ",i);
scanf("%d%d", &a1,&b1);
a[a1][b1]=a[b1][a1]=1;
}
}
void afis(int k)
{
for(int i=1;i<=k;i++)
printf("%d ",st[i]);
printf("\n");
}
void back(int k)
{
if(st[k-1]==v2)
afis(k-1);
for(int i=1;i<=n;i++)
{
if(ok(i,k))
{
st[k]=i;
back(k+1);
}
}
}
int main()
{
clrscr();
citire();
st[1]=1;
back(2);
getch();
return 0;
}
Pb 3
#include<stdio.h>
#include<conio.h>
#define max 100
int a[max][max],n,viz[max];
void citire()
{
int x,y;
printf("Dati n=: ");
scanf("%d",&n);
printf("Dati perechiile: (terminati cu 0 )\n");
scanf("%d%d",&x,&y);
while(x && y)
{
a[x][y]=a[y][x]=1;
scanf("%d%d",&x,&y);
}
}
void parc(int k)
{
viz[k]=1;
for(int i=1;i<=n;i++)
if(a[k][i]&& (!viz[i]))
parc(i);
}
int main()
{
clrscr();
citire();
Pb 4
#include<stdio.h>
#include<conio.h>
#define max 100
int a[max][max],n,viz[max];
void citire()
{
freopen("graf.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d", &a[i][j]);
}
void afis()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
void parc(int k)
{
for(int i=1;i<=n;i++)
if(a[k][i])
{
viz[i]=viz[k]==1?2:1;
}
}
int main()
{
citire();
for(int i=1;i<=n;i++)
if(!viz[i])
{
viz[i]=1;
parc(i);
}
clrscr();
afis();
printf("Multimea A: ");
for(i=1;i<=n;i++)
if(viz[i]==1)
printf("%d ",i);
printf("\n");
printf("Multimea B: ");
for(i=1;i<=n;i++)
if(viz[i]==2)
printf("%d ",i);
return 0;
}
#include<iostream.h>
#include<conio.h>
#define max 100
int a[max][max],n,m,st[max],mx[max],nr_max,viz[max];
//spatiu in favoarea vitezei
void citire()
{
clrscr();
cout<<"Dati n=";
cin>>n;
cout<<"Dati nr de muchii:";
cin>>m;
int i,x,y;
cout<<"Dati arcele";
for(i=1;i<=m;i++)
{
cout<<i<<": ";
cin>>x>>y;
a[x][y]=1;
}
}
void afis()
{
cout<<"Portiunea cu numarul maxim "<<nr_max<<": ";
for(int i=1;i<=nr_max;i++)
cout<<mx[i]<<" ";
getch();
}
for(int i=1;i<=n;i++)
if(a[st[k]][i] && (!viz[i]))
{
st[k+1]=i;
viz[i]=1;
parc(k+1);
}
}
void noduri()
{
for(int i=1;i<=n;i++) //pornim cu fiecare nod
{ //si vedem cat de departe ajungem
for(int j=1;j<=n;j++)
st[j]=viz[j]=0;
st[1]=i;
viz[i]=1;
parc(1);
}
}
int main()
{
citire();
noduri();
afis();
return 0;
}
cu numar k de noduri
#include<iostream.h>
#include<conio.h>
#define max 100
int a[max][max],n,m,st[max],nr,k2,viz[max];
void citire()
{
clrscr();
cout<<"Dati n=";
cin>>n;
cout<<"Dati nr de muchii:";
cin>>m;
cout<<"Dati k= ";
cin>>nr;
int i,x,y;
cout<<"Dati muchiile\n";
for(i=1;i<=m;i++)
{
cout<<i<<": ";
cin>>x>>y;
a[x][y]=a[y][x]=1;
}
void afis()
{
cout<<"\n";
for(int i=1;i<=nr;i++)
cout<<st[i]<<" ";
for(int i=1;i<=n;i++)
if(a[st[k]][i] && (!viz[i]))
{
k2=k+1;//retinem nr. de elemente din st[]
st[k+1]=i;
viz[i]=1;
parc(k+1);
}
if(!st[2])//pentru componentele cu un sg nod
k2=1;
}
void noduri()
{
for(int i=1;i<=n;i++) //pornim cu fiecare nod nevizitat
{ //si vedem cate elemente exista in componenta conexa
if(!viz[i])
{
for(int j=1;j<=n;j++)
st[j]=0;
st[1]=i;
viz[i]=1;
parc(1);
if(k2==nr)
afis();
}
}
}
int main()
{
citire();
noduri();
getch();
return 0;
}
Pb 5
#include<stdio.h>
#include<conio.h>
#define max 100
int n,a[max][max],viz[max],ind,t[max];
void citire()
{
int x,y;
printf("Dat muchiile: -terminati cu 0-\n");
scanf("%d%d",&x,&y);
while(x&&y)
{
if(x>n)
n=x;
if(y>n)
n=y;
a[x][y]=a[y][x]=1;
scanf("%d%d",&x,&y);
}
}
int main()
{
clrscr();
citire();
Pb 6
#include<stdio.h>
#include<conio.h>
#define max 100
int a[max][max],n,viz[max],ind;
void citire()
{
freopen("graf.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d", &a[i][j]);
void afis()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
void parc(int k)
{
if(!ind)
{
int main()
{
clrscr();
citire();
viz[i]=1;
parc(i);
afis();
if(ind)
printf("Graful nu este bipartit");
else
{
printf("Multimea A: ");
for(i=1;i<=n;i++)
if(viz[i]==1)
printf("%d ",i);
printf("\n");
printf("Multimea B: ");
for(i=1;i<=n;i++)
if(viz[i]==2)
printf("%d ",i);
return 0;
}