# PBinfo #479 – LantMaxim – 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 două vârfuri p q. Să se determine cel mai lung lanț elementar cu extremitățile p și q.

Date de intrare
Fişierul de intrare lantmaxim.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 două numere p q.

Date de ieşire
Fişierul de ieşire lantmaxim.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
muchiile se pot repeta în fișierul de intrare
1 ≤ p , q ≤ n
pentru toate datele de test, va exista cel puțin un lanț cu extremitățile p q

Exemplu:
lantmaxim.in

5 7
1 4 
1 3 
3 5 
4 5 
1 2 
4 2 
3 4
2 5
lantmaxim.out

2 1 3 4 5

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
#include <cassert>
using namespace std;
ifstream fin("lantmaxim.in");
ofstream fout("lantmaxim.out");
int n , a[105][105], x[105] , p , q, xmax[105], kmax = 0;
void afis(int x[], int k)
{
	for(int  i = 1 ; i <= k ; ++ i)
		fout << x[i] << " ";
	fout << "\n";
}
int OK(int k)
{
	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 >> p >> q);
	x[1] = p;
	back(2);
	afis(xmax , kmax);
	return 0;
}
```

## Resurse

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