Sei sulla pagina 1di 6

Grafuri orientate rezolvari

Rezolvarea subpunctelor : a),b),c),d),e),g),h),i),j),k),p).


#include <iostream>

#include <fstream>

using namespace std;

ifstream f("date.txt");

int a[50][50],n,m;

void citire() int dminus(int k)


{ {
int i,j; int nr=0,i;
f>>n; for(i=1; i<=n; i++)
f>>m; if(a[i][k]==1)
for( i=1; i<=n; i++) nr++;
for( j=1; j<=n; j++) return nr;
f>>a[i][j]; }
}
int dplus(int k) void vecpred(int k)
{ {
int nr=0,i; int i,nr=0;
for(i=1; i<=n; i++) for(i=1; i<=n; i++)
if(a[k][i]==1) if(a[i][k]==1)
nr++; cout<<i<<" ";
return nr; nr++;
} }
void vecsuc(int k) int nrsucc(int k)
{ {
int i,nr=0; int i,nr=0;
for(i=1; i<=n; i++) for(i=1; i<=n; i++)
if(a[k][i]==1) if(a[k][i]==1)
cout<<i<<" "; nr++;
nr++; return nr;
} }
void roywarshall()
int minim() {
{ int i, j, k;
int mini=n-1,i; for(k=1; k<=n; k++)
for(i=1; i<=n; i++) for(i=1; i<=n; i++)
{ for(j=1; j<=n; j++)
if(dminus(i)<mini) if(i!=j)
mini=dminus(i); if(a[i][j]==0)
} a[i][j]=a[i][k]*a[k][j];
return mini; }
}
void afis()
{
int i,j;
cout<<"matricea drumurilor este: "<<endl;
for(i=1; i<=n; i++)
{
cout<<endl;
for(j=1; j<=n; j++)
cout<<a[i][j]<<" ";
}
cout<<endl;
}
int main()

{ citire();

int i,j,x,y,g,h,k;

cout<<"rezolvare a): "<<endl;

for(i=1; i<=n; i++)

cout<<" vf "<<i<<"are gradul interior "<<dminus(i)<<" si gradul exterior "<<dplus(i)<<endl;

cout<<endl<<"rezolvare b): "<<endl;

for(i=1; i<=n; i++)

if(dplus(i)==dminus(i))

cout<<"varful "<<i<<" are gradul interior egal cu gradul exterior"<<endl;

cout<<endl<<"rezolvare c): "<<endl;

for(i=1; i<=n; i++)

if(dplus(i)==0&&dminus(i)==0)

cout<<"varfuri izolate: "<<i<<" ";

cout<<endl;

cout<<endl<<"rezolvare d): "<<endl;

cout<<"varfuri terminale: ";

for(i=1; i<=n; i++)

if(dplus(i)==0)

cout<<i<<" ";

cout<<endl;

cout<<endl<<"rezolvare e): "<<endl;

cout<<" varful x: ";


cin>>x;

cout<<"varful y: ";

cin>>y;

if(a[x][y]==1 or a[y][x]==1)

cout<<"sunt adiacente";

else cout<<"nu sunt adiacente"<<endl;

cout<<endl;

cout<<endl<<"rezolvare g): "<<endl;

cout<<" varful x: ";

cin>>g;

cout<<"succesorii varfului x : ";

vecsuc(g);

cout<<endl;

cout<<endl<<"rezolvare h): "<<endl;

cout<<"varful x: ";

cin>>h;

cout<<"predecesorii varfului x sunt: ";

vecpred(h);

cout<<endl;

cout<<endl<<"rezolvare i): "<<endl;

cout<<"varfuri care sunt adiacente cu toate celelalte: ";

for(j=1; j<=n; j++)

if(nrsucc(j)==n-1)

cout<<j<<" ";

else if(j==n)

cout<<"nu avem";

cout<<endl;

cout<<endl<<"rezolvare j): "<<endl;

cout<<" numarul de succesori k:";


cin>>k;

cout<<"varfurile au exact k succesori : ";

for(i=1; i<=n; i++)

if(nrsucc(i)==k)

cout<<i<<" ";

cout<<endl;

cout<<endl<<"rezolvare k): "<<endl;

cout<<"varfurile cu grad interior minim sunt: ";

for(j=1; j<=n; j++)

if(minim()==dminus(j))

cout<<j<<" ";

cout<<endl;

cout<<endl<<"rezolvare p): "<<endl;

roywarshall();

afis();

return 0;}

Rezolvarea subpunctului l): Rezolvarea subpunctului n):

#include <iostream> #include <iostream>


#include <fstream> #include <fstream>
using namespace std; using namespace std;
ifstream f("date.in"); int a[150][150],n,m,v[150];
int a[50][50],c[50],viz[50],in,sf,n; void citire()
void citire() { ifstream f("graf.txt");
{ int i,j; f>>n>>m;
f>>n; for(int i=1;i<=n;i++)
for(i=1; i<=n; i++) for(int j=1;j<=n;j++)
for(j=1; j<=n; j++) f>>a[i][j];
f>>a[i][j]; } f.close();}
int main() int valid(int k)
{ citire(); { if(k>1 && a[v[k-1]][v[k]]==0)
int ok; in=sf=1; return 0;
c[in]=1; for(int i=1;i<k;i++)
viz[1]=1; if(v[i]==v[k])
ok=1; return 0;
while(in<=n) return 1; }
{ for(int i=1; i<=n; i++) int solutie(int k)
if(a[c[sf]][i]==1&&viz[i]==0) {int i;
{ sf++; return k<=m;}
c[sf]=i; void Afis(int k)
viz[i]=1; } { for( i=1;i<=k;i++)
in++; } cout<<v[i]<<" ";
for(int i=1; i<=n; i++) cout<<endl; }
if(viz[i]==0) void back(int k)
ok=0; {int i;
cout<<endl; for(i=1;i<=n;i++)
if(ok) cout<<"conex"<<endl; { v[k]=i;
else cout<<"nu este conex"<<endl; if(valid(k))
return 0; } { if(solutie(k))
Afis(k);
back(k+1); }
}
}
void init(int x)
{ v[1]=x;
back(2);
cout<<endl; }
int main()
{ int x;
Citire();
cout<<"x=";cin>>x;
init(x); }

Rezolvarea subpunctului o): Rezolvarea subpunctului f):


#include <iostream> #include <fstream>
#include <fstream> using namespace std;
ifstream f("graf.txt");
using namespace std; int a[100][100],n,m,v[100];
ifstream f("graf.txt"); int main()
int a[100][100],suc[100],pred[100],nrc,n; { int i,j;
void parcurgere1(int x) f>>n;
{ for(i=1;i<=n;i++)
int k; for(j=1;j<=n;j++)
suc[x]=nrc; f>>a[i][j];
for(k=1;k<=n;k++) cout<<"m=";cin>>m;
if(a[x][k]==1&&suc[k]==0) for(i=1;i<=m;i++)
{suc[k]=nrc; {
parcurgere1(k); }} cout<<"v["<<i<<"]=";
void parcurgere2(int x) cin>>v[i];
{int k; }
pred[x]=nrc; int ok=1;
for(k=1;k<=n;k++) for(j=1;j<m;j++)
if(a[k][x]&&pred[k]==0) if(a[v[j]][v[j+1]]==0)
{ ok=0;
pred[k]=nrc; if(!ok)
parcurgere2(k);}} cout<<"nu e drum";
int main() f.close();
{f>>n; }
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
nrc=1;
for(i=1;i<=n;i++)
if(suc[i]==0)
{suc[i]=nrc;
parcurgere1(i);
parcurgere2(i);
for(j=1;j<=n;j++)
if(suc[j]!=pred[j])
{ suc[j]=0;
pred[j]=0;}
nrc++;}
for(i=1;i<=nrc;i++)
{cout<<"componentele tare conexe sunt:";
for(j=1;j<=n;j++)
if(suc[j]==i)
cout<<j<<" ";
cout<<endl; }
f.close();}

Rezolvarea subpunctului m):

#include <iostream> void back(int k)


#include <fstream> { int i;
using namespace std; for(i=1;i<=n;i++)
ifstream f("graf.txt"); { v[k]=i;
int a[100][100],v[100],n,nr=0,x,y,k; if(valid(k))
int valid(int k) if(solutie(k))
{ int i; tipar(k);
if(k>1&&a[v[k-1]][v[k]]==0) else
return 0; back(k+1);}}
for(i=1;i<k;i++) int main()
if(v[i]==v[k]) { int i,j;
return 0; f>>n;
return 1; for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
} f>>a[i][j];
int solutie(int k) cout<<"x=";cin>>x;
{return (v[k]==y);} cout<<"y=";cin>>y;
void tipar(int k) back(x);
{ int i; if(nr==0)
nr++; cout<<"nu sunt drumuri intre x si y";
for(i=1;i<=k;i++) f.close();}
cout<<v[i]<<" ";
cout<<endl;}

Potrebbero piacerti anche