Dudi
Dołączył: 13 Kwi 2007
Posty: 53
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Pon 20:27, 22 Paź 2007 Temat postu: Algorytmy - grafy |
|
|
tylko pozmieniac, i najlepiej nie tylko nazwy, a tez tabulatury itd, mozecie tez wlasny stos/kolejke zastosowac, bo moze moją pamiętać, bo się czepiała
Kod: | #include <iostream>
#include <stdio.h>
using namespace std;
typedef int DATA;
typedef struct Node{
DATA Data;
Node *wsk;
} *Kolejka;
void KInit(Kolejka *s);
void KIn(Kolejka *k, DATA e);
void KOut(Kolejka *k);
DATA KTop(Kolejka *k);
bool KEmpty(Kolejka *k);
void KInit(Kolejka *k)
{
*k = NULL;
}
void KIn(Kolejka *k, DATA e)
{
Kolejka el = new Node;
el->Data = e;
el->wsk = NULL;
if(!(*k)) { (*k) = el; return; }
Kolejka tmp = *k;
while(tmp->wsk)
{
tmp=tmp->wsk;
}
tmp->wsk = el;
}
void KOut(Kolejka *k)
{
Kolejka tmp;
if(KEmpty(k)) { std::cerr<<"Blad: Zdejmowanie z pustej kolejki!" <<endl; return;}
tmp = (*k);
(*k) = (*k)->wsk;
delete tmp;
}
DATA KTop(Kolejka *k)
{
if(!KEmpty(k)) return (*k)->Data;
else { std::cerr<<"Blad: Odczytywanie wartosci z pustej kolejki!"<<endl; return 0;}
}
bool KEmpty(Kolejka *k)
{
return (bool)!(*k);
}
int main()
{
Kolejka Nowy;
int n;
Kolejka *tbInc;
KInit(&Nowy);
char tmpch[10];
FILE *in = fopen("in.txt", "r");
FILE *out = fopen("out.txt", "w");
fscanf(in, "%d", &n);
tbInc = new Kolejka[n];
fscanf(in, "%[ \n]", tmpch);
for(int i = 0; i<n; i++)
{
KInit(&tbInc[i]);
if( fscanf(in, "%[ \n]", tmpch ) != 0){
cout<< "pustalinia" <<endl;
continue;
}
while(1)
{
int d;
fscanf(in, "%d", &d);
if( d == 19 )
{
d = d;
}
cout<<d<< " ";
KIn(&tbInc[i], d-1);
if(fgetc(in) != ' ' ) break;
}
cout<< endl;
//fscanf(in, "%[ \n]", tmpch);
}
fprintf(out, "\n" );
//******** algorytm ******
bool *Odwiedzone = new bool[n];
for(int i = 0; i<n; i++)
Odwiedzone[i] = false;
KIn(&Nowy, 0); Odwiedzone[0] = true; fprintf(out, "%d ", 1);
while(!KEmpty(&Nowy))
{
int index;
index = KTop(&Nowy); KOut(&Nowy);
while(!KEmpty(&tbInc[index]))
{
int tmp = KTop(&tbInc[index]);
if(!Odwiedzone[tmp])
{
KIn(&Nowy, tmp );
fprintf(out, "%d ", tmp +1);
Odwiedzone[tmp] = true;
}
KOut(&tbInc[index]);
}
}
//********** koniec algorytmu ********
bool ok = 1;
for(int i=0; i<n; i++)
{
if(!Odwiedzone[i]) ok = 0;
}
//if(!ok) fprintf(out, "Niespojny!");
//else fprintf(out, "Spojny!");
delete [] Odwiedzone;
fclose(in);
fclose(out);
delete [] tbInc;
system("pause");
}
|
|
|