Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- using namespace std;
- ifstream f("e:\\info\\backtracking\\grafpartial.txt");
- int nr=0;
- void citire(int a[20][20],int m)
- { int i,j;
- for(int k=1;k<=m;k++)
- { f>>i>>j;
- a[i][j]=1;
- a[j][i]=1;
- }
- }
- void afisare(int a[20][20],int n)
- { for(int i=1;i<=n;i++)
- { for(int j=1;j<=n;j++)
- cout<<a[i][j]<<" ";
- cout<<endl;
- }
- }
- void transformare(int b[20][20],int a[20][20],int n)
- { int i,j,k=1;
- for(i=1;i<=n;i++)
- for(j=1;j<=i;j++)
- if(a[i][j]==1)
- { b[i][k]=1;
- b[j][k]=1;
- k++;
- }
- }
- int succesor(int st[20],int k,int m)
- { if(st[k]<m)
- { st[k]++;
- return 1;
- }
- else
- return 0;
- }
- int valid(int st[20],int k)
- { for(int i=1;i<k;i++)
- if(st[k]==st[i])
- return 0;
- if(k>1 && st[k]<st[k-1])
- return 0;
- return 1;
- }
- void tipar(int st[20],int p,int n,int b[20][20])
- { nr++;
- cout<<"graful partial "<<nr<<" are ";
- cout<<" muchiile:";
- for(int i=1;i<=p;i++)
- { for(int j=1;j<=n;j++)
- if(b[j][st[i]]==1)
- cout<<j<<" ";
- cout<<";";
- }
- cout<<endl;
- }
- void bt(int k,int st[20],int n,int m,int p,int b[20][20])
- { int as,ev;
- k=1;
- st[k]=0;
- while(k>0)
- { as=1;
- ev=0;
- while(as && !ev)
- { as=succesor(st,k,m);
- if(as)
- ev=valid(st,k);
- }
- if(as)
- if(k==p)
- { tipar(st,p,n,b);
- nr++;
- }
- else
- { k++;
- st[k]=0;
- }
- else
- k--;
- }
- }
- int main()
- { int nr=0,a[20][20]={0},b[20][20],k,n,m,p,st[20];
- f>>n>>m;
- citire(a,m);
- afisare(a,n);
- transformare(b,a,n);
- for(p=m;p>=0;p--)
- bt(k,st,n,m,p,b);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement