char g [24] [81] = {{ "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"}, { "oo o o"}, { "oo o o"}, { "o oooooooooooooo o"}, { "oo o o o"}, { "OO S O O O"}, {"Oo OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"}, {"o oooooooooo o oooo oo o o o"}}}}}}}}}}}}}}}}}}}}}} {oooo ooooo oo o "}, {" o ooooooooooooooooooooooooooooooooooooooooooooooooo "}, {" o o "}, {" o "}, {" o O "}, {" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO}, {oooooo oooooooo o "}, {" O O O O O o "}, {"
OOOOOOOOOOOOOOOOOOOOOOOO OO "}, {" o e oooo o ooo o "}, {" o o o "}, {" O O O O O "}, {" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO},}; #}}},}; #}}},}; # inc
TypedEf struct tagqueue que, * lpqueue; struct tagqueue {int Tile; int F; int h; lpqueue next; lpqueue pent;};
Queue Queue [8192], H, T, F; Int xs, ys, xe, ye; int R [8192]; # define tile (x, y) #define tile_x (tile) ((TILE)% 80) #define Tile_Y (Tile) (TILE) / 80)
INTJUDGE (int x, int y, int _H) {y = ye - y; x = xe - x; return sqrt (x * x y * y) * 10 _H;}
INTTRYTILE (int X, int y, lpqueue parent, int _h) {int Tile; lpqueue s, loop, stop;
Tile = Tile (x, y); if (x <0 || x> = 80 || Y <0 || y> = 24 || g [y] [x]! = '|| _h> = r [TILE]) {RETURN-1;} r [Tile] = _H; s = f.next; assert (s); s); s-> tile = tile; f.next = S-> Next; S-> Parent = Parent ; S-> h = _h; s-> f = judge (x, y, _H); for (loop = & h; loop-> f
Return 0;}
INTFIND_PATH () {INT I, X, Y, TILE, Steps; LPQUEUE S
MEMSET (Queue, 0, SizeOf (Queue)); Memset (& F, 0, SIZEOF (F)); f.next = queue; for (i = 0; I For (;;) {s = h.next; if (s == & t) {return -1;} if (S-> Tile == Tile) {Break;} h.next = S-> Next; x = Tile_x (S-> Tile); Y = Tile_Y (S-> Tile); Trytile (x - 1, y, s, s, s> h 10); trytile (x 1, y, s, s-> h 10); Trytile (x, y - 1, s, s-> h 10); trytile (x, y 1, s, s-> h 10); trytile (x - 1, y - 1, S, S-> h 14); trytile (x - 1, y 1, s, s-> h 14); trytile (x 1, y - 1, s, S-> H 14); Trytile (x 1, y 1, s, s-> h 14);} steps = 0; while (s) {x = Tile_x (S-> Tile); y = tile_y (S-> Tile); G [y] [x] = ' '; s = S-> Parent; Steps;} Printf ("% d steps used./n", steps); g [ys] [xs] = 's' ; G [ye] [xe] = 'e'; for (x = 0; x <24; x) {printf ("% s / n", g [x]);} Return 0;} INTMAIN (Void) {INT I, J;