Sorbaállítás (Számítógépes hálózat építés)

A számítógépes hálózatok tervezése során a számítógépeket össze kell kötni egymással. Az így létrejövő hálózat lineáris felépítésű, azaz bármely számítógép pontosan két másikhoz kapcsolódik, kivéve a lánc elején és végén lévő számítógépeket, amelyek csak egy számítógéphez kapcsolódnak. Egy ilyen hálózatot mutat az alábbi ábra, amelyen a számítógépeket fekete pontok jelölik. A számítógép helyzetét síkbeli koordinátákkal írjuk le (a koordinátarendszer nincs feltüntetve az ábrán). A csatlakozó gépek közti távolságot lábban mérjük.

Különböző okokból kívánatos, hogy minimalizáljuk az elhasznált kábel hosszát. Írjunk programot, amely meghatározza, hogy milyen sorrendben kell a gépeket összekötni ahhoz, hogy az elhasznált kábel hossza minimális legyen! A kábelek a föld alatt húzódnak, ezért két szomszédos gép összekapcsolásához szükséges kábel hossza 16 lábbal több, mint a két gép távolsága. Az alábbi képen a fenti hálózat egy optimális kapcsolása látható; a konfigurációhoz szükséges kábelhossz (4+16) + (5+16) + (5,83+16) + (11,18+16)=90,01 láb.

Bemenet:

Az input fájl több adatsort is tartalmazhat. Minden adatsor első sora a hálózatban lévő gépek számát tartalmazza. Egy hálózatban legalább 2, legfeljebb 8 gép van. Ha a hálózatban szereplő gépek száma 0, akkor az, az input végét jelöli. A számítógépek számát definiáló sor után következő sorok a hálózatban lévő gépek koordinátáit tartalmazzák. A koordináták egész számok a [0..150] intervallumból. Minden számítógép egyszer van listázva, és bármely pontban legfeljebb egy számítógép van.

Kimenet:

Az outputnak minden hálózatra tartalmaznia kell annak sorszámát (melyet az inputban elfoglalt pozíciója határoz meg), valamint minden egyes kábel darabra egy sort, amely tartalmazza a kábel hosszát, és az összekötött számítógépek koordinátáit! A hálózathoz tartozó utolsó sor a minimálisan szükséges kábel összes hosszát tartalmazza! A kábel darabok listázásánál sorba haladjunk a hálózat egyik végétől a másikig! Kövessük a példa outputban bemutatott formátumot! Az egyes adatsorokhoz tartozó eredményeket, egy csillagokat tartalmazó sorral válasszuk el! A távolságokat két tizedes jegyre kerekítsük!

Példa:
 

INPUT.TXT

OUTPUT

6

5 19

55 28

38 101

28 62

111 84

43 116

5

11 27

84 99

142 81

88 30

95 38

3

132 73

49 86

72 111

0

**********************************************************

Hálózat #1

A(z) (5,19) és (55,28) összekötéséhez szükséges kábel hossza: 66,80 láb.

A(z) (55,28) és (28,62) összekötéséhez szükséges kábel hossza: 59,42 láb.

A(z) (28,62) és (38,101) összekötéséhez szükséges kábel hossza: 56,26 láb.

A(z) (38,101) és (43,116) összekötéséhez szükséges kábel hossza: 31,81 láb.

A(z) (43,116) és (111,84) összekötéséhez szükséges kábel hossza: 91,15 láb.

A szükséges kábel hossza: 305,45 láb.

**********************************************************

Hálózat #2

A(z) (11,27) és (88,30) összekötéséhez szükséges kábel hossza: 93,06 láb.

A(z) (88,30) és (95,38) összekötéséhez szükséges kábel hossza: 26,63 láb.

A(z) (95,38) és (84,99) összekötéséhez szükséges kábel hossza: 77,98 láb.

A(z) (84,99) és (142,81) összekötéséhez szükséges kábel hossza: 76,73 láb.

A szükséges kábel hossza: 274,40 láb.

**********************************************************

Hálózat #3

A(z) (132,73) és (72,111) összekötéséhez szükséges kábel hossza: 87,02 láb.

A(z) (72,111) és (49,86) összekötéséhez szükséges kábel hossza: 49,97 láb.

A szükséges kábel hossza: 136,99 láb.

 

 

(ACM döntő 1992)