Jak rozmieścić losowe obiekty na tablicy 2d?

0

Witam!

Mam następujący problem. Otóż muszę napisać algorytm w ansi C który pozwoli na rozmieszczenie danych obiektów trójelementowych na na tablicy 2d 10x10 w sposób pełni losowy tak aby poszczególne obiekty znajdowały się w odległości co najmniej jednego rzędu współrzędnych od siebie (czyli jeśli mam obiekt dwuelementowy na współrzędnych (0,1) oraz (0,2) to kolejny może się znajdować na dowolnym polu tablicy poza już zajętymi (0,1), (01 )oraz sąsiadującymi z nim czyli (1,1)(,1,2),(1,3),(0,3).
Jak na razie mój fragment kodu odpowiadający za rozmieszczanie losowe wygląda tak:

	for (m=0; m<2; m++)
	{
        srand(time(0));
        k=rand()%2;
	i=rand()%10;
	j=rand()%10;
	printf("%d %d\n",i,j);
	tab_komp_1[i][j]=1;
	for (l=0; l<1; l++)
		{
		if (k==1)
			{
			tab_1[++i][j]=1;
			k=rand()%2;
			}
		else
			{
			tab_1[i][++j]=1;
			k=rand()%2;
			}	
		}
	}

Jednak nie zawiera on funkcji umożliwiającej zastosowanie danego warunku oraz w ten sposób niektóre elementy mogą wychodzić poza tablicę. Jak to napisać?

0

Cóż, wydaje mi się że dobrym rozwiązaniem byłoby zrobić prototyp struktury, która oprócz faktycznej

wartości przechowywałaby również informację o tym czy dane pole macierzy jest zajęte czy nie.

Mogłoby to wyglądać jakoś tak:

#define TRUE 1
#define FALSE 0

typedef BOOL unsigned char;

struct pole
{
   BOOL zajete;
   int wartosc;
};

pole tablica[x][y];

później dopiszesz jeszcze jakąś funkcję "wstawiającą" ten trójelementowy obiekt do tablicy. Zadbaj o

to, by funkcja ustawiła wszystkie pola obiektu oraz sąsiadujące na zajęte oraz oczywiście przed

"wstawieniem" sprawdziła, czy pole które już wylosowałeś nie jest już zajęte. Co do tematu

wstawienia obiektu poza zasięg tablicy - przecież znasz jej wielkość, a elementy wstawiasz po kolei.

Wystarczy więc zwykły "if" i po sprawie :-)

0

A możesz trochę jaśniej?
Jednak jakby nie patrzeć jestem początkujący i trochę nie za bardzo wiem co mam dokładnie zrobić...

0

masz pole np 4x4

. . . .
. . . .
. . . .
. . . .

i ksztalty np:

x     x        x x
x     x x          

i masz teraz te ksztalty ulozyc losowo na polu tak aby sie nie stykaly. kojarzysz gre w statki? np

. x . x
x x . x
. . . .
. x x .

bierzesz wiec plansze:

. . . .
. . . .
. . . .
. . . .

i losujesz jakas pozycje. stawiasz tam jeden ze 'statkow':

. x . .
x x . .
. . . .
. . . .

i potem nastepny i nastepny. problem w zabezpieczeniu sie przed 'kolizja' czy 'stykaniem sie'. kolizja jest prosta - kladac statek, patrzysz czy tam gdzie go kladziesz przypadkiem juz nie ma jakiegos statku. gorzej ze stykaniem sie. ale... przy odrobinie pomyslu: mozesz np. kladac statek, dodatkowo zaznaczyc na planszy "ramke" w okol niego

! x ! .
x x ! .
! ! ! .
. . . .

i teraz, kladac nowy statek sprawdzasz kolizje w zmieniony sposob: nie tylko czy na danym miejscu jest juz statek, ale i czy moze jest ramka

i pozostaje zadanie najtrudniejsze, teoretycznie: co zrobic jak BEDZIE kolizja albo jak sprawdzic czy w ogole DA sie te statki ulozyc i jak 'wylosowac' zeby sie dalo --- o ile zadanie tego wymaga.. bo jak jest dozwolone stwierdzenie "oops, nie wyszlo" to nie ma co sie meczyc..

1 użytkowników online, w tym zalogowanych: 0, gości: 1