author | viric@llimona |
Sat, 06 May 2006 10:08:11 +0200 | |
changeset 7 | 834620831e7a |
parent 6 | bfbca2c0fc70 |
child 8 | b41a580b3abe |
permissions | -rw-r--r-- |
4
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
1 |
#define BOX '$' |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
2 |
#define WALL '#' |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
3 |
#define MAN '@' |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
4 |
#define PLATFORM '.' |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
5 |
#define BOXINPLATFORM '*' |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
6 |
#define MANINPLATFORM 'E' |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
7 |
#define BLANK ' ' |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
8 |
#define CORNER '-' |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
9 |
#define MANCANMOVE '+' |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
10 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
11 |
//#define DEBUG |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
12 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
13 |
enum |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
14 |
{ |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
15 |
ALARM_SECONDS=1, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
16 |
MAX_X=50, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
17 |
MAX_Y=50, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
18 |
MAX_MOVES=50, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
19 |
MAX_STEPS=50, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
20 |
MAX_BOXES=15 |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
21 |
}; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
22 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
23 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
24 |
enum logic |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
25 |
{ |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
26 |
TRUE=1, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
27 |
FALSE=0, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
28 |
}; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
29 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
30 |
struct Position |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
31 |
{ |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
32 |
int x; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
33 |
int y; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
34 |
}; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
35 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
36 |
struct Map |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
37 |
{ |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
38 |
char Cells[MAX_Y][MAX_X]; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
39 |
char cells_boxes[MAX_Y][MAX_X]; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
40 |
char man_moves[MAX_Y][MAX_X]; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
41 |
int SizeX, SizeY; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
42 |
struct Position Man; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
43 |
int NumPlatforms; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
44 |
int NumBoxesInPlatform; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
45 |
struct Position Box[MAX_BOXES]; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
46 |
int NumBoxes; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
47 |
}; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
48 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
49 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
50 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
51 |
enum e_direction |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
52 |
{ |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
53 |
DIR_LEFT, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
54 |
DIR_RIGHT, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
55 |
DIR_DOWN, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
56 |
DIR_UP |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
57 |
}; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
58 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
59 |
static const struct Position move_vectors[4] = { |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
60 |
{0, 1}, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
61 |
{0, -1}, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
62 |
{1, 0}, |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
63 |
{-1, 0}}; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
64 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
65 |
struct BoxMove |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
66 |
{ |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
67 |
int box; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
68 |
struct Position dir; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
69 |
}; |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
70 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
71 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
72 |
/* Prototypes for map managing */ |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
73 |
|
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
74 |
void CopyMap (struct Map *Mdest, const struct Map *Morig); |
6 | 75 |
int are_boxes_equal(const struct Position b1[], const struct Position b2[], |
76 |
int n); |
|
77 |
||
78 |
/* Prototypes for unix i/o, processes */ |
|
4
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
79 |
void ReadMap(struct Map *M, char *FileName); |
d9259a605dec
A cleaner version, split between different files.
viric@llimona
parents:
diff
changeset
|
80 |
void ShowMap (const struct Map *M); |
6 | 81 |
void init_os(); |
82 |
void PrintMove(struct BoxMove b); |
|
83 |
||
84 |
/* Functions related to map solution */ |
|
85 |
int solve_map(const struct Map origin); |