int maxszer(drzewo d)
{
    kolejka kol = malloc(sizeof(Tkolejkal));
    drzewo temp;
    int max = 0, poziom = 0;
    tworzpusta(kol);
    wstaw(kol, d);
    wstaw(kol, NULL);
    while(!pusta(*kol))
    {
        pobierz(kol, &temp);
        if(temp == NULL)
        {
            if(poziom > max)
                max = poziom;
            if(poziom > 0)
                wstaw(kol, NULL);
            poziom = 0;
        }
        else
        {
            poziom++;
            if(temp->psyn != NULL)
                wstaw(kol, temp->psyn);
            if(temp->lsyn != NULL)
                wstaw(kol, temp->lsyn);
        }
    }
    free(kol);
    return max;
}
Beispiel #2
0
lista odwroc(lista lis) {
  // odwraca liste  lis  od konca
  lista pom = NULL;
  char slowo[MAX_DL_SLOWA];
  while (! pusta(lis)) {
    strcpy(slowo, pierwsze(lis)); lis = reszta(lis);
    pom = dolacz(slowo, pom);
  }
  return pom;
}
Beispiel #3
0
void dolacz (wezel x, kolejka *K) {
    elem *p;
    p = malloc(sizeof(elem));
    p -> n    = x   ;
    p -> nast = NULL;
    if(pusta(K)) {
        K -> poczatek = p;
        K -> koniec   = p;
    } else {
        K -> koniec -> nast  = p;
        K -> koniec          = p;
    }
}
Beispiel #4
0
wezel usun (kolejka *K) {
    wezel x;
    elem *p;
    if(pusta(K)) {
        printf("Kolejka jest pusta!\n");
        return x;
    }
    p = K -> poczatek;
    if(K -> poczatek == K -> koniec) {
        x = K -> poczatek -> n;
        free(p);
        K -> poczatek = NULL;
        K -> koniec   = NULL;
        return x;
    }
    x = K -> poczatek -> n;
    K -> poczatek = K -> poczatek -> nast;
    free(p);
    return x;
}
LISTA::~LISTA()
{
  while(!pusta())
    (*this)--;
  std::cout << "Zwolniono miejsce przeznaczone na liste" << std::endl;
}
Beispiel #6
0
int main()
{
    short int i, j, sw, sk, d;
    (void) scanf("%hd %hd\n", &m, &n);
    char tab2[2020];

    init(&Q);

    for(i = 0; i < n; i++) {
	(void) fgets(tab2, sizeof(tab2), stdin);
        for(j = 0; j < m; j++) {
            nodes[i][j].pole = tab2[j];
            nodes[i][j].vis = 0;
            if(nodes[i][j].pole == 'P') {
                u.w = i;
		u.k = j;
		u.dist = 0;
                u.vis = 1;
                dolacz(u,&Q);
            }
            if(nodes[i][j].pole == 'S') {
                sw = i;
                sk = j;
            }
        }
    }

    while(!pusta(&Q)) {// printf("tu");
        u = usun(&Q);
        if(adj(u.w+1, u.k)) {
            d = u.w+1;
	    a.pole = nodes[d][u.k].pole;
            a.vis  = nodes[d][u.k].vis = 1;
            a.dist = u.dist + 1;
	    a.w = d;
	    a.k = u.k;
            dolacz(a, &Q);
            if(a.pole == 'S') {
                printf("%d",  a.dist);
                break;
            }
        }
        if(adj(u.w-1, u.k)) {
            d = u.w-1;
	    a.pole = nodes[d][u.k].pole;
            a.vis = nodes[d][u.k].vis = 1;
            a.dist = u.dist + 1;
	    a.w = d;
	    a.k = u.k;
            dolacz(a, &Q);
            if(a.pole == 'S') {
                printf("%d",  a.dist);
                break;
            }
        }
        if(adj(u.w, u.k+1)) {
            d = u.k+1;
	    a.pole = nodes[u.w][d].pole;
            a.vis = nodes[u.w][d].vis = 1;
            a.dist = u.dist + 1;
	    a.w = u.w;
	    a.k = d;
            dolacz(a, &Q);
            if(a.pole == 'S') {
                printf("%d",  a.dist);
                break;
            }
        }
        if(adj(u.w, u.k-1)) {
            d = u.k-1;
	    a.pole = nodes[u.w][d].pole;
            a.vis = nodes[u.w][d].vis = 1;
            a.dist = u.dist + 1;
	    a.w = u.w;
	    a.k = d;
             dolacz(a, &Q);
            if(a.pole == 'S') {
                printf("%d",  a.dist);
                break;
            }
        }
    }

    if(nodes[sw][sk].vis == 0) printf("NIE");

    return 0;
}