# PBinfo #4152 – LantMaxim1 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerinţa
Se dă lista muchiilor unui graf neorientat cu n vârfuri și un vârf q. Să se determine cel mai lung lanț elementar cu extremitatea finală în q.

Date de intrare
Fişierul de intrare lantmaxim1.in conţine pe prima linie numerele n și m, reprezentând numărul de vârfuri ale grafului și numărul de muchii date în continuare. Fiecare dintre următoarele m linii conține câte o pereche de numere i j, cu semnificația că există muchie între i și j.

Următoarea linie conține numărul q.

Date de ieşire
Fişierul de ieşire lantmaxim1.out va conține cel mai lung lanț elementar cu extremitățile p și q, vârfurile sale fiind separate prin exact un spațiu. Dacă sunt mai multe lanțuri de lungime maximă, se va afișa primul în ordine lexicografică.

Restricţii şi precizări

1 ≤ n ≤ 20
1 ≤ i , j ≤ n
1 ≤ q ≤ n

Exemplu:
lantmaxim1.in

5 6
1 4 
1 3 
3 5 
4 5 
1 2 
3 4
5
lantmaxim1.out

2 1 3 4 5

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
#include <cassert>
using namespace std;
ifstream fin("lantmaxim1.in");
ofstream fout("lantmaxim1.out");
int n , A[105][105], x[105] , q, xmax[105], kmax = 0;
void afis(int x[], int k)
{
    for(int  i = 1 ; i <= k ; ++ i)
        fout << x[i] << " ";
    fout << "\n";
}
bool OK(int k)
{
	if(k == 1)
		return true;
    if(A[x[k-1]][x[k]] != 1)
        return 0;
    for(int i = 1 ; i < k ; ++i)
        if(x[k] == x[i])
            return 0;
    return 1;
}
void verifica(int k)
{
    if(k > kmax)
    {
        kmax = k;
        for(int i = 1; i <= k ; ++i)
            xmax[i] = x[i];
    }
}
void back(int k)
{
    for(int i = 1  ; i <= n ; ++i)
    {
        x[k] = i;
        if(OK(k))
        {
            if(x[k] == q)
                verifica(k);
            else
                back(k + 1);
        }
    }
}
int main()
{
    int i , j , m;
    fin >> n >> m;
    while(m > 0)
    {
        fin >> i >> j;
        A[i][j] = A[j][i] = 1;
        m --;
    }
    assert(fin >> q);
    back(1);
    afis(xmax , kmax);
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4152)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4152/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4152/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
