Enunt: Fie o harta cu n tari si m culori, m>=4. Sa se coloreze harta astfel incat doua tari vecine sa nu aiba aceeasi culoare.
#include<string.h>
#include<iostream.h>
int v[100],a[100][100],n,i,j,k,m;
char culoare[100][30];
void afisare()
{ int i;
for(i=1;i<=n;i++)
{cout<<i<<culoare[v[i]];
cout<<endl;}}
int cont(int k)
{for(i=1;i<=k-1;i++)
if(a[i][k]==1 && v[i]==v[k])
return 0;
return 1;}
void back(int k)
{int i;
for(i=1;i<=m;i++)
{v[k]=i;
if(cont(k)==1)
if(k==n)
afisare();
else
back(k+1);}}
int main()
{cout<<"n=";
cin>>n;
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
{cin>>a[i][j];
a[j][i]=a[i][j];}
cout<<"m=";
cin>>m;
for(i=1;i<=m;i++)
{cout<<"dati culoare"<<endl;
cin>>culoare[i];}
back(1);
return 0;}
Oana's blog
luni, 17 decembrie 2012
Problema in C++ -Multimi (submultimi)
Enunt: Sa se afiseze toate posibilitatile ca n studenti sa dea m examene.
#include<iostream.h>
int v[100],n,k,t,i,m;
void afisare()
{int i;
t=t+1;
cout<<"solutia n"<<t<<endl;
for(i=1;i<=m;i++)
cout<<v[i]<<' ';
cout<<endl; }
int cont(int k)
{ for(i=1;i<=k-1;i++)
if(v[k]<=v[i])
return 0;
return 1; }
void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(cont(k)==1)
if(k==m)
afisare();
else
back(k+1);}}
int main()
{cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
t=0;
back(1);
return 0;}
#include<iostream.h>
int v[100],n,k,t,i,m;
void afisare()
{int i;
t=t+1;
cout<<"solutia n"<<t<<endl;
for(i=1;i<=m;i++)
cout<<v[i]<<' ';
cout<<endl; }
int cont(int k)
{ for(i=1;i<=k-1;i++)
if(v[k]<=v[i])
return 0;
return 1; }
void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(cont(k)==1)
if(k==m)
afisare();
else
back(k+1);}}
int main()
{cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
t=0;
back(1);
return 0;}
2 margele alaturate sa aiba aceeasi culoare
#include<iostream.h>
int v[100],n,i,j,t,k,m,x;
char culoare [100][30];
void afisare()
{ int i;
t=t+1;
for(i=1;i<=n;i++)
{cout<<v[i]<<' '<<culoare[v[i]];}
cout<<endl;}
int cont(int k)
{ int i;
if(v[k]= =v[k-2]&&k>2)
return 0;
if(v[k]!=v[k-1]&&k>1&& k%2= =0)
return 0;
if(k= =n&&v[k]= =v[1])
return 0;
return 1;}
void back(int k)
{int i;
for(i=1;i<=m;i++)
{v[k]=i;
if(cont(k)= =1)
if(k= =n)
afisare();
else
back(k+1); }}
int main()
{cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
t=0;
for(i=1;i<=m;i++)
{cout<<"dati culoare"<<endl;
cin>>culoare[i];}
back(1);
cout<<t<<"solutii"<<endl;
return 0;}
int v[100],n,i,j,t,k,m,x;
char culoare [100][30];
void afisare()
{ int i;
t=t+1;
for(i=1;i<=n;i++)
{cout<<v[i]<<' '<<culoare[v[i]];}
cout<<endl;}
int cont(int k)
{ int i;
if(v[k]= =v[k-2]&&k>2)
return 0;
if(v[k]!=v[k-1]&&k>1&& k%2= =0)
return 0;
if(k= =n&&v[k]= =v[1])
return 0;
return 1;}
void back(int k)
{int i;
for(i=1;i<=m;i++)
{v[k]=i;
if(cont(k)= =1)
if(k= =n)
afisare();
else
back(k+1); }}
int main()
{cout<<"n=";
cin>>n;
cout<<"m=";
cin>>m;
t=0;
for(i=1;i<=m;i++)
{cout<<"dati culoare"<<endl;
cin>>culoare[i];}
back(1);
cout<<t<<"solutii"<<endl;
return 0;}
Problema 37 (variante teza)
//Intre n persoane care stau pe scaune s-au iscat conflicte. Acestea stau pe scaune numerotate de la 1 la n. Scrieti un program care sa afiseze toate modurile posibile de reasezare a persoanelor astfel incat sa nu se gaseasca alaturi doua persoane in conflict.
#include<iostream.h>
int v[100],i,j,k,n,t;
char a[100][100];
void afisare()
{ int i;
t=t+1;
for(i=1;i<=n;i++)
{cout<<a[v[i]]<<' ';}
cout<<endl;}
int cont(int k)
{ for(i=1;i<=k-1;i++)
if(v[i]==v[k])
return 0;
if(abs(v[k]-v[k-1])==1)
return 0;
if(k==n && v[k]==v[1])
return 0;
return 1;}
void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(cont(k)==1)
if(k==n)
afisare();
else
back(k+1);}}
int main()
{cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
back(1);
return 0;}
#include<iostream.h>
int v[100],i,j,k,n,t;
char a[100][100];
void afisare()
{ int i;
t=t+1;
for(i=1;i<=n;i++)
{cout<<a[v[i]]<<' ';}
cout<<endl;}
int cont(int k)
{ for(i=1;i<=k-1;i++)
if(v[i]==v[k])
return 0;
if(abs(v[k]-v[k-1])==1)
return 0;
if(k==n && v[k]==v[1])
return 0;
return 1;}
void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(cont(k)==1)
if(k==n)
afisare();
else
back(k+1);}}
int main()
{cout<<"n=";
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
back(1);
return 0;}
Problema 23 (variante teza)
23. Sa se genereze n perechi de paranteze care se inchid corect. Exemplu: n=3: ( ( ( ) ) ) ( ( ) ( ) ) ( ) ( ( ) ) etc
int cont(int k)
{int si,sd;
si=0;
sd=0;
for(i=1;i<=k;i++)
if(v[i]==1)
sd=sd+1;
else
si=si+1;
if(si>sd)
return 0;
if(k==2*n && si!=sd)
return 0;
return 1; }
#include<iostream.h>
int v[100],i,j,k,n,t;
void afisare()
{ int i;
for(i=1;i<=2*n;i++)
if(v[i]==1)
cout<<"(";
else
cout<<")";
cout<<endl;}
int cont(int k)
{int si,sd;
si=0;
sd=0;
for(i=1;i<=k;i++)
if(v[i]==1)
sd=sd+1;
else
si=si+1;
if(si>sd)
return 0;
if(k==2*n && si!=sd)
return 0;
return 1; }
void back(int k)
{int i;
for(i=1;i<=2;i++)
{v[k]=i;
if(cont(k)==1)
if(k==2*n)
afisare();
else
back(k+1);}}
int main()
{cout<<"n=";
cin>>n;
back(1);
return 0;}
Problema 63 (variante teza)
//63. Sa se genereze toate numerele naturale ale caror cifre se gasesc printre cifrele lui x citit si au lungimea cel mult egala cu lungimea lui x. Cifrele se pot repeta
#include<iostream.h>
int v[100],i,j,n,x,k,a[100];
void afisare(int k)
{int i;
for(i=1;i<=k;i++)
cout<<a[v[i]]<<' ';
cout<<endl;}
void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
afisare(k);
if(k<n)
back(k+1);}}
int main()
{cout<<"x=";
cin>>x;
while(x!=0)
{j++;
a[j]=x%10;
x=x/10;
n++;}
back(1);}
#include<iostream.h>
int v[100],i,j,n,x,k,a[100];
void afisare(int k)
{int i;
for(i=1;i<=k;i++)
cout<<a[v[i]]<<' ';
cout<<endl;}
void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
afisare(k);
if(k<n)
back(k+1);}}
int main()
{cout<<"x=";
cin>>x;
while(x!=0)
{j++;
a[j]=x%10;
x=x/10;
n++;}
back(1);}
produs cartezian
#include<iostream.h>
int v[100],i,j,n,x,k,a[100];
void afisare()
{int i;
for(i=1;i<=n;i++)
cout<<v[i]<<' ';
cout<<endl;}
void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(k==n)
afisare();
else
back(k+1);}}
int main()
{cout<<"n=";
cin>>n;
back(1);}
int v[100],i,j,n,x,k,a[100];
void afisare()
{int i;
for(i=1;i<=n;i++)
cout<<v[i]<<' ';
cout<<endl;}
void back(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(k==n)
afisare();
else
back(k+1);}}
int main()
{cout<<"n=";
cin>>n;
back(1);}
Abonați-vă la:
Postări (Atom)