Problema comisului voiajor

        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;}