Cerința
Se dă mulțimea V a arcelor unui graf orientat cu n vârfuri.
Să se determine drumul simplu de lungime maximă cu extremitatea inițială în vârful p din graf. Un drum simplu parcurge o singură dată un arc de pe traseul descris de drum în graf.
Date de intrare
Fișierul de intrare dslm.in conține pe prima linie numerele n și p, iar pe fiecare din următoarele linii, câte două numere a b reprezentând câte un arc (a,b) din V.
Date de ieșire
Fișierul de ieșire dslm.out va conține pe prima linie cel mai mic drum în sens lexicografic dintre drumurile simple de lungime maximă cu extremitatea inițială în nodul p; vârfurile din drum sunt separate prin câte un singur spațiu.
Restricții și precizări
1 ≤ n ≤ 201 ≤ a , b ≤n1 ≤ p ≤ n- mulțimea
Vare cel mult30de elemente - pentru fiecare test există soluție
- dacă există mai multe soluții, atunci se va scrie în fișier cel mai mic drum în sens lexicografic dintre soluțiile obținute
Exemplu
dslm.in
12 2 1 2 2 3 3 1 1 4 6 4 4 5 5 7 7 5 8 9 9 8 10 11 11 12
dslm.out
2 3 1 4 5 7 5
Explicație
Graful conține un singur drum simplu de lungime maximă cu extremitatea inițială în vârful p=2, D=[2,3,1,4,5,7,5]
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema DSLM:
#include <fstream>
using namespace std;
ifstream f("dslm.in");
ofstream g("dslm.out");
int a[21][21],n,p, d[100], dmax[100],lgmax;
void citire()
{
int i,x,y;
f>>n>>p;
while(f>>x>>y)
a[x][y]=1;
}
void copie(int lg)
{
lgmax=lg;
for(int i=1; i<=lg; i++) dmax[i]=d[i];
}
void scrie_drum()
{
for(int i=1; i<=lgmax; i++)
g<<dmax[i]<<" ";
g<<endl;
}
void dfs(int x, int lg)
{
d[lg]=x;
int ex_s=0, y;
for(y=1; y<=n; y++)
if(a[x][y])
{
a[x][y]=0;
ex_s=1;
dfs(y,lg+1);
a[x][y]=1;
}
if(ex_s==0 && lg>lgmax)
copie(lg);
}
int main()
{
citire();
dfs(p,1);
scrie_drum();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa
.
Rezolvarea problemei #1551 DSLM
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1551 DSLM de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!