Cod sursa(job #2693510)

Utilizator TiberiwTiberiu Amarie Tiberiw Data 6 ianuarie 2021 11:53:11
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>
using namespace std;
int m,n,s[100],k,as,ev,H,S=0;
struct cuburi{int l;char c;};
cuburi v[100];
ofstream g("out.txt");
void tipar()
{

    int i;
    for(i=1;i<=k;i++)
        g<<v[s[i]].l<<v[s[i]].c<<"\n";
    S=S-v[s[k]].l;
    g<<"\n";
    g<<"\n";

}
int solutie()
{
    return (S==H);
}
void citire()
{
    ifstream f("in.in");
    f>>n;
    f>>H;
    int i;
    for(i=1;i<=n;i++)
    {
        f>>v[i].l>>v[i].c;
    }


}
int succesor()
{
    if(s[k]<n)
    {
        s[k]++;
        return 1;
    }
    else
        S=S-v[s[k-1]].l;
        return 0;
}
int valid()
{
    int i;
        for(i=1;i<k;i++)
        {
         if(v[s[k-1]].l<v[s[k]].l)
        return 0;
        if((v[s[k-1]].c==v[s[k]].c)||(s[i]==s[k]))
            return 0;
        }

    if(S+v[s[k]].l<=H)
    {
        S=S+v[s[k]].l;
        return 1;
    }
     else
            return 0;
}
void bt()
{
    k=1;
    s[k]=0;
    while(k>0)
   {
       as=1;ev=0;
       while(as&&!ev)
       {
           as=succesor();
           if(as)
            ev=valid();
       }
       if(as)
       {
           if(solutie())
            tipar();
           else
           {
               k++;
               s[k]=0;
           }
       }
       else
        k--;
   }

}
int main()
{
    citire();
    bt();

    return 0;
}