/** ex8-2.c 莠、蟾ョ轤ケ縺ョ繧ス繝シ繝� * 繧ュ繝シ繝懊�繝牙�蜉帙@縺溷コァ讓吶°繧芽ソ代>鬆�↓繝��繧ソ繧剃クヲ縺ウ螟峨∴縺ヲ逕サ髱「縺ォ蜃コ蜉帙☆繧九�繝ュ繧ー繝ゥ繝��� */ #include <stdio.h> #include <math.h> #include <string.h> #define CROSSING_SIZE 100 /* 莠、蟾ョ轤ケ謨ー=100 */ #define MAX_NAME_SIZE 50 /* 譛螟ァ譁�ュ玲焚50譁�ュ�(蜊願ァ�) */ typedef struct { double x, y; /* 菴咲スョ x, y */ } Position; /* 菴咲スョ繧定。ィ縺呎ァ矩�菴� */ typedef struct { int id; /* 莠、蟾ョ轤ケ逡ェ蜿キ */ Position pos; /* 菴咲スョ繧定。ィ縺呎ァ矩�菴� */ double wait; /* 蟷ウ蝮�セ�■譎る俣 */ char jname[MAX_NAME_SIZE]; /* 莠、蟾ョ轤ケ蜷� */ char ename[MAX_NAME_SIZE]; /* 莠、蟾ョ轤ケ蜷� */ int points; /* 莠、蟾ョ驕楢キッ謨ー */ int next[5]; /* 髫」謗・縺吶k莠、蟾ョ轤ケ逡ェ蜿キ */ } Crossing; Crossing cross[CROSSING_SIZE]; int map_read(char *filename) { /* 繧オ繝シ繝√〒菴懊▲縺溘b縺ョ繧貞盾閠�↓縺励※荳九&縺� */ } void print_cross(int i) { /* 繧オ繝シ繝√〒菴懊▲縺溘b縺ョ繧貞盾閠�↓縺励※荳九&縺� */ } /* 縺薙%繧芽セコ縺九i蜈・蜉帙@縺ヲ縺上□縺輔> */ /* num蛟玖。ィ遉コ = 陦ィ遉コ謨ー蛻カ髯仙庄閭ス */ void print_cross_list(int num) { int i; for (i = 0; i < num; i++) print_cross(i); } /* 繝舌ヶ繝ォ繧ス繝シ繝医�繝励Ο繧ー繝ゥ繝�繧貞�蜉帙@縺ヲ荳九&縺�シ壼�豌励′縺ゅk莠コ縺ッ莉悶�繧りゥヲ縺励※縺ソ縺セ縺励g縺� */ void bubble_sort(int num, double x0, double y0) { int i, j, lo, up; double d1, d2; /* 霍晞屬繧定ィ育ョ励@縺セ縺� */ Crossing temp; /* 蜈・繧梧崛縺医�縺溘a縺ォ菴ソ縺」縺ヲ縺上□縺輔> */ lo = 0; up = num - 1; while (up > lo) { j = lo; for (i = lo; i < up; i++) { d1 = /* 莠、蟾ョ轤ケ i 縺九i (x0,y0) 縺セ縺ァ縺ョ霍晞屬 */ d2 = /* 莠、蟾ョ轤ケ i+1 縺九i (x0,y0) 縺セ縺ァ縺ョ霍晞屬 */ if (d1>d2) { /* 騾���↑縺ョ縺ァ i 縺ィ i+1 繧貞�繧梧崛縺医∪縺励g縺� */ /* temp 繧剃スソ縺」縺ヲ縺上□縺輔> */ temp = cross[i]; /* 蜈・繧梧崛縺育ャャ�第焔鬆� */ /* 蜈・繧梧崛縺育ャャ�呈焔鬆� */ /* 蜈・繧梧崛縺育ャャ�捺焔鬆� */ j = i; } } up = j; } } int main(void) { int crossing_number; /* 莠、蟾ョ轤ケ謨ー */ double x, y; /* 繝輔ぃ繧、繝ォ縺ョ隱ュ縺ソ霎シ縺ソ */ crossing_number = map_read("map2.dat"); printf("loaded %d crossings\n", crossing_number); /* fprintf(stderr,... 縺ォ縺吶k縺ィ縲- more , | less 縺ェ縺ゥ縺ョ蠖ア髻ソ繧� */ /* 蜿励¢縺ェ縺上↑繧翫∪縺� */ fprintf(stderr, "蝓コ貅門コァ讓吶r蜈・蜉帙@縺ヲ縺上□縺輔> (%%lf %%lf 蠖「蠑�):\n"); scanf("%lf %lf", &x, &y); bubble_sort(crossing_number, x, y); print_cross_list(crossing_number); return 0; }