Zadanko, pproblem z setami

0

Treść zadania:

Kamil jest ulicznym śpiewakiem, który podróżuje po Bajtocji.
Właśnie planuje swoją trasę konertową po miastach Bajtocji.
Jako transport służą mu autobusy.
W  Bajtocji jeden autobus kursuje tylko w jedną stronę od pewnego
miasta A do miasta B. Kamil zastanawia się, czy jest w stanie zaplanować
trasę koncertową, że będzie mógł powrócić do miasta, w którym ją rozpoczął.
  1. Mam kod.
  2. Ja troszkę źle przeczytałam, i szukałam jako początkowego "1"... No i tak wyszedł ten kod, co napisałam. Pytanie tylko, czemu pokazuje mi błąd przy setach, i deklaracji... Czy możliwe są sety tablicach? A po drugie, czy jest dobre, choć wydaje mi się, że tak.

A oto kod:

#include <iostream>
#include <set>
using namespace std;
bool funkcja(set<int> tab[], int x, int y)
{
    set<int>::iterator i;
    for (i=tab[i].begin(); i!=tab[i].end(); ++i)
    {
        if (*i==1)
            return true;
        else
            funkcja(tab, x, *i);
    }
    return false;
}
int main()
{
    int x, n, m, a, b;
    cin>>x;
    set<int> tab[x];
    for (int i=0; i<x; i++)
    {
        cin>>n>>m;
        for (int i=0; i<m; i++)
        {
            cin>>a>>b;
            tab[a].insert(b);
        }
    }
    if (funkcja(tab, 1, 0)==true)
        cout<<"TAK"<<endl;
    else
        cout<<"NIE"<<endl;
    return 0;
} 
0

Ach, Bajtocja.

bool funkcja(set<int> tab[], int x, int y)
{
    set<int>::iterator i;
    for (i=tab[i].begin(); i!=tab[i].end(); ++i)
    // ...

Trochę tu poszalałeś, przyjrzyj się co to robi:

  1. przekazujesz tablicę setów (bez żadnej informacji ile ma elementów swoją drogą)
  2. indeksujesz później tą tablicę elementem typu set<int>::iterator.

To tak na pierwszy rzut oka co się nie zgadza składniowo. Czy jest dobrze ciężko powiedzieć bo mało kompletny Twój opis zadania (mógłbyś podać link do całego opisu, albo chociaż wkleić resztę opisu - bo wątpię żeby to było wszystko. Albo opis wejścia/wyjścia)? jeden autobus kursuje tylko w jedną stronę - a drugi? ;)

0

Zapomniałam o opisie wejścia i wyjścia!! Przepraszam!!
a więc:

 
W pierwszym wierszu standardowego wejścia znajduje się jedna liczba całkowita T (1<= T <= 10) oznaczająca liczbę przypadków testowych (czyli automatycznie błąd: mam pokazywanie odpowiedzi po wszystkich przypadkach (czyli dla ostatniego) a nie w pętli, ale to błahostka). W pierwszym wierszu każdego przypadku testowego znajdują się dwie liczby całkowite, N i M (1<=N <= 100000, 1<= M <= 200000) oznaczające odpowiednio liczbę miast i kursujących autobusów w Bajtocjii. W kolejnych M wierszach znajdują się dwie liczby całkowite A iB (1<<= A, B, <= N, A!=B) oznaczające, że i-ty autobus jeździ z miasta o numerze A do miasta o numerze B. Żadne dwa autobusy nie mają takich samych kursów. 
 
1

Może coś w tym stylu:

#include <iostream>
#include <vector>
#include <set>
using namespace std;

typedef set<unsigned> uset;
typedef vector<uset> graph;

bool checkpath(uset &route,uset &add,graph &tab)
  {
   for(uset::iterator i=add.begin();i!=add.end();++i)
     {
      unsigned node=*i;
      if(route.find(node)==route.end())
        {
         if(!node) return true;
         route.insert(node);
         return checkpath(route,tab[node],tab);
        }
     }
   return false;
  }

int main()
  {
   unsigned T;
   cin>>T;
   while(T--)
     {
      unsigned NodeCount,EdgeCount;
      cin>>NodeCount>>EdgeCount;
      graph tab(NodeCount);
      while(EdgeCount--)
        {
         unsigned a,b;
         cin>>a>>b;
         tab[a-1].insert(b-1);
        }
      static const char *answer[]={"NIE","TAK"};
      uset route;
      cout<<answer[checkpath(route,tab[0],tab)]<<endl;
     }
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1