Ebben az algoritmus háziban szerintetek mit kell programozni?
A házi a következő: Mérje meg a gráfok topológikus rendezésének hatékonyságát! Töltsön le különböző méretű txt szövegeket, olvassa be a segédprogram segítségével a memóriába, és hozza létre a gráfot. A gráf csúcsai az adott szavak, és két csúcs között fut él, ha a megadott távolságfüggvény, kisebb, mint egy előre megadott szám(ezt a programozó állítja be), az él iránya a nagyobbik szó felé mutat. Ezen a gráfon végezze el a rendezést, különböző méretű bemenetekre.
Segédprogram:
// szavankent beolvasunk egy szoveget
// a szavakat kisbetusitjuk, kitoroljuk a nem betuket
// az eredmenyt rendezzuk, toroljuk az ismetlodeseket
// es elmentjuk az a[] tombbe
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int Z=10000000;
string a[Z];
string b[Z];
//ha nagyon nagy meretu tombot foglalunk le,
//azt vagy dinamikusan tudjuk megtenni (new fuggveny)
//vagy globalis valtozokent
int N=0;
int front=0, rear=0;
int qu[Z];
void qput(int a){
qu[rear++]=a;
}
int qget(){
int tmp;
if(front<Z){
tmp=qu[front];
qu[front++]=0;
return tmp;
} else return -1;
}
void beolvas(){
string st;
int i,j,k,s;
ifstream fin("readme.txt");
while(fin>>st){
s=st.size();
for(k=0,i=0;k<s;k++){
if(st[i]>='A'&&st[i]<='Z')st[i]-='A'-'a';
//nagy betu -> kisbetu
if(st[i]<'a'||st[i]>'z')st.erase(st.begin()+i);
//ami nem betu kitoroljuk
else i++;
}
if(st.size()>0)b[N++]=st;
//ha maradt a szobol berakjuk a tombbe
}
sort(b,b+N);
a[0]=b[0];
st=b[0];
j=0;
for(k=1,i=1;k<N;k++){
if(b[k]!=st){a[i++]=b[k];st=b[k];j=0;}
else if(j<2){ //a 2-o atirhato, ha ugy tartja szuksegesnek!
a[i]=b[k];
j++;
for(s=0;s<j;s++)a[i]+='q';
i++;
}
//ha nincs ismetlodes, elmentjuk az a[] tombbe
//ha van, akkor irjunk moge egy 'q' betut, de max 2-ot, vagy irja at!
}
N=i;
cout<<"N: "<<N<<endl;
for(int i=0;i<N+30;i++)
cout<<a[i]<<", ";
cout<<endl;
for(int i=0;i<N+30;i++)
cout<<b[i]<<", ";
cout<<endl;
}
bool vanel(string a, string b){
//ha azonos betuvel es massalhangzoval kezdodik a ket szo,
//akkor visszafele mutat a nyil
//egyebkent elore
bool nyil=false;
if(a==b)return 0;
if(a[0]=='a'||a[0]=='e'||a[0]=='i'||a[0]=='o'||a[0]=='u'
||b[0]=='a'||b[0]=='e'||b[0]=='i'||b[0]=='o'||b[0]=='u'
||a[0]!=b[0])
{
if(a<b)nyil=true;
else nyil=false;
}
else
if(a>b)nyil=true;
else nyil=false;
return nyil;
}
int main(){
beolvas();
system("pause");
}
cout<<"N: "<<N<<endl;
for(int i=0;i<N+30;i++)
cout<<a[i]<<", ";
cout<<endl;
for(int i=0;i<N+30;i++)
cout<<b[i]<<", ";
cout<<endl;
ez a rész nem kell bele, csak én néztem vmit.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!