#include #include #include #include #include using namespace std; template class elemlist { class Elem { typedef set elemlist; elemlist elems[Size]; typedef typename elemlist::const_iterator const_iterator; public: const_iterator begin(unsigned ind) const { return elems[ind].begin(); } const_iterator end(unsigned ind) const { return elems[ind].end(); } void dump() const { for(unsigned a=0; a elems; public: void push_back(const Elem &b) { elems.push_back(b); } unsigned size() const { return elems.size(); } const Elem &operator[] (unsigned n) const { return elems[n]; } elemlist() { } elemlist(Elem &b, unsigned count=1) : elems(count, b) { } void Replace(unsigned a, const Elem &b) { elems[a] = b; } void Erase(unsigned b) { elems.erase(elems.begin() + b); } void dump() const { for(unsigned a=0; a result; for(unsigned a=0; a CE*GI + BCD*HI * * Menetelmä: E*I:stä kaikki paitsi yksi elementti sisältyy CE*G:hen. * Siispä katsotaan voidaanko *I lisätä CE*G:hen. * Tätä varten muodostetaan lista CE*GI:stä ja katsotaan * mahtuvatko kaikki mainitut elementit alkuperäiseen listaan. * */ Retry: for(unsigned a=0; a void BuildDemo(T marked, const T *map, const T *goal, const T *axis, ...) { elemlist elems; unsigned len[level], pos[level]; const char *axi[level]; va_list ap; va_start(ap, axis); for(unsigned a=0; a::Elem tmp; for(unsigned a=0; a ('X', "..X.X" "XXX.X" "XXXXX" "XXXXX", "CE*FGHI + ABCE*GHI + ABCDE*HI", "ABCDE", "FGHI"); BuildDemo<2> ('X', "....." "..X.X" ".XXX." ".XXXX", "CE*GI + BCD*HI", "ABCDE", "FGHI"); BuildDemo<2> ('X', "X..X." "X.X.X" "X.XXX" "X.XXX", "AD*FHI + ACE*GHI", "ABCDE", "FGHI"); BuildDemo<1> ('X', "XX.X..X", "ABDG", "ABCDEFG"); BuildDemo<3> ('X', ".X" "XX" ".." "XX" ".." "XX", "B*CD*G + AB*D*GHI", "AB", "CD", "GHI"); } int main(void) { BuildDemo(); return 0; }