map.c
author viric@llimona
Sun, 07 May 2006 01:31:50 +0200
changeset 12 a2c334a71a6b
parent 10 9148590f009d
child 26 95fccfcbd04c
permissions -rw-r--r--
A minimum working (hope so!) version of the algorithm is working, although it says levels/02 is unsolvable. Now the solution is printed map by map.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     1
#include <stdio.h>
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     2
#include <stdio.h>
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     3
#include <string.h>
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     4
#include "general.h"
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     5
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     6
void CopyMap (struct Map *Mdest, const struct Map *Morig)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     7
{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     8
	memcpy((void *) Mdest, (void *) Morig, sizeof (struct Map));
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     9
}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    10
8
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    11
static int are_boxes_equal(const struct Position b1[], const struct Position b2[],
6
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    12
	int n)
4
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    13
{
6
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    14
	int i;
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    15
	char tmp[MAX_Y][MAX_X]; /* !!!argh */
4
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    16
6
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    17
	memset(tmp, 0, sizeof(tmp));
4
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    18
6
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    19
	for (i=0; i < n; i++)
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    20
	{
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    21
		tmp[b1[i].y][b1[i].x] = 1;
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    22
	}
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    23
	for (i=0; i < n; i++)
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    24
	{
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    25
		if (tmp[b2[i].y][b2[i].x] != 1)
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    26
			return FALSE;
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    27
	}
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    28
	return TRUE;
4
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
10
9148590f009d I made variables explicitily const.
viric@llimona
parents: 8
diff changeset
    31
int is_new_map(const struct Map maps[], const int depth)
8
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    32
{
10
9148590f009d I made variables explicitily const.
viric@llimona
parents: 8
diff changeset
    33
	const struct Map *m = &maps[depth];
8
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    34
	int i;
10
9148590f009d I made variables explicitily const.
viric@llimona
parents: 8
diff changeset
    35
	extern int max_depth; 
8
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    36
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    37
	for(i=0; i<max_depth; i++)
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    38
	{
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    39
		/* No l'hem de comparar amb ell mateix */
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    40
		if (i == depth)
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    41
			continue;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    42
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    43
		if (m->NumBoxesInPlatform != maps[i].NumBoxesInPlatform)
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    44
			continue;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    45
		else
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    46
		{
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    47
			if (!are_boxes_equal(m->Box, maps[i].Box, m->NumBoxes))
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    48
				continue;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    49
		}
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    50
		return FALSE;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    51
	}
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    52
	return TRUE;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    53
}