Un comis voiajor trebuie să viziteze un număr n de oraşe. Iniţial, el se află într-unul dintre ele, notat 1. Comis voiajorul doreşte să nu treacă de două ori prin acelaşi oraş, iar la întoarcere să revină în oraşul din care a plecat. Cunoscând legăturile existente între oraşe, se cere să se tipărească toate drumurile posibile pe care le poate efectua comis voiajorul.Drumurile dintre orase sunt date sub forma unei matrici a[i][j]=1 daca intre orasul i si j exista drum si a[i][j]=0 daca nu exista drum intre orasul i si orasul j.
#include <iostream>
int n,st[25],i,j,a[20][20],start;
void initializare ()
{ cin>>n>>start;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
for(i=1;i<=25;i++) st[i]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
st[1]=start; }
void tiparire (int p)
{ for(i=1;i<=p;i++)
{cout<<st[i]<<" “;
cout<<endl;}
int validare (int p)
{for(i=1;i<=p;i++)
cout<<st[i]; }
{for(i=1;i<=n;i++)
if (st[p]=st[i]) return 0;
if (a[st[p]][st[p-1]]==0) return 0;
return 1; }
void back (int p)
{int val;
for( val=1; val<=n; val++)
{st[p]=val;
if (validare(p))
if(p==n && a[st[n]][start]==1)
tiparire(p);
else back(p+1);}}
int main ()
{i nitializare ()
back(2);
return 0;}