30/09/2018, 16:42

Thuật toán cho mảng 2 chiều (C/C++)

Hiện tại em đang làm một trò chơi có liên quan đến mảng 2 chiều, suy nghĩ nhiều rồi mà vẫn chưa ra đc thuật toán
" Cho mảng 2 chiều [AxB], làm thế nào để MÁY có thể chọn NGẪU NHIÊN một mảng CON [MxN] bất kỳ thuộc mảng MẸ [AxB] để ta truyền giá trị cho mảng CON đó"
Ví dụ: cho mảng MẸ [10x10], chọn ngẫu nhiên mảng CON có kích thước [3x2]/[2x3] thuộc mảng MẸ.

4Rum mình ai biết thì xin chỉ giáo

... viết 18:47 ngày 30/09/2018
làm thế nào để MÁY có thể chọn NGẪU NHIÊN

Cứ có chữ “ngẫu nhiên” thì xúc hàm rand() ra xài thôi. Tiếp theo là nghĩ cho nó rand() như thế nào.
Mình giả sử A và M là số dòng của matrix, B và N là số cột. Nếu muốn random một ô có M dòng (M < A) thì rand() từ 0 -> A - M nghĩa là chỉ số dòng đầu tiên của M dòng đó nằm trong khoảng từ 0 -> A - M (Nếu dòng đầu tiên có chỉ số > A - M thì dòng cuối cùng thứ M sẽ > A). Tương tự cho cột.

Programmer Riot viết 18:55 ngày 30/09/2018

Cứ có chữ “ngẫu nhiên” thì xúc hàm rand() ra xài thôi. Tiếp theo là nghĩ cho nó rand() như thế nào.Mình giả sử A và M là số dòng của matrix, B và N là số cột. Nếu muốn random một ô có M dòng (M < A) thì rand() từ 0 -> A - M nghĩa là chỉ số dòng đầu tiên của M dòng đó nằm trong khoảng từ 0 -> A - M (Nếu dòng đầu tiên có chỉ số > A - M thì dòng cuối cùng thứ M sẽ > A). Tương tự cho cột.

làm như thế thì máy chỉ chọn từng ô ngẫu nhiên (có thể rời rạc nhau), cái mình cần ở đây là 1 mảng con [mxn] ngẫu nhiên áh

... viết 18:56 ngày 30/09/2018

Ý mình là lấy random 2 số M và N, xong random lấy chỉ số đầu của M dòng và N cột. Chỉ số dòng đầu và cột đầu nằm trong khoảng A - M và B - N. Sao lại không liên tiếp?

Programmer Riot viết 18:49 ngày 30/09/2018

Mình nghĩ có lẽ bạn chưa hiểu rõ vấn đề, bạn có thể lấy giấy ra làm sẽ thấy. Thank.

Sáng Béo viết 18:51 ngày 30/09/2018

Mình nghĩ có lẽ bạn chưa hiểu rõ vấn đề, bạn có thể lấy giấy ra làm sẽ thấy. Thank.

bạn không hiểu ý của @nguyenchiemminhvu
ý a ấy là chọn ra chỉ số của hàng đầu tiên của ma trận con thuộc đoạn 0-> A-M-1 ví dụ là hàng i đi. thì ma trận con (MxN) sẽ từ hàng i đến i+M-1 => có M hàng. với Cột thì tương tự, chọn random j từ 0->B-N-1. rồi giới hạn cột của ma trận con từ j->j+N-1. -> 4 chỉ số ở 4 góc của ma trận con là mt[i,j] , mt[i,j+N-1], mt[i+M-1,j], mt[i+M-1,j+N-1]
bạn xem đủ 1 ma trận MxN chưa.

Programmer Riot viết 18:48 ngày 30/09/2018

bạn không hiểu ý của @nguyenchiemminhvuý a ấy là chọn ra chỉ số của hàng đầu tiên của ma trận con thuộc đoạn 0-> A-M-1 ví dụ là hàng i đi. thì ma trận con (MxN) sẽ từ hàng i đến i+M-1 => có M hàng. với Cột thì tương tự, chọn random j từ 0->B-N-1. rồi giới hạn cột của ma trận con từ j->j+N-1. -> 4 chỉ số ở 4 góc của ma trận con là mt[i,j] , mt[i,j+N-1], mt[i+M-1,j], mt[i+M-1,j+N-1]bạn xem đủ 1 ma trận MxN chưa.

hi, mình hiểu ý của @nguyenchiemminhvu rồi, nhưng như thì chẳng khác nào gán cho máy 1 mảng con rồi, chọn ngẫu nhiên những ô trong mảng đó, cái mình cần ở đây là mảng con tạo ra cũng cần ngâu nhiên. VD: mình cần mảng con a[3x2] (như vậy sẽ có 6 ô) trong mảng [10x10], đầu tiên mình sẽ lấy ô thứ nhất là a[6; 4], thì ô tiếp theo sẽ khoanh vùng trong a[4->8; 3->5] đúng hok nào, như vậy khi liệt kê ra thì có rất nhiều mảng kiểu [3x2] trong vùng đó, sau đó chọn ô tiếp theo làm sao cho phù họp với những ô đã chọn trước nữa

Sáng Béo viết 18:45 ngày 30/09/2018

hi, mình hiểu ý của @nguyenchiemminhvu rồi, nhưng như thì chẳng khác nào gán cho máy 1 mảng con rồi, chọn ngẫu nhiên những ô trong mảng đó, cái mình cần ở đây là mảng con tạo ra cũng cần ngâu nhiên. VD: mình cần mảng con a[3x2] (như vậy sẽ có 6 ô) trong mảng [10x10], đầu tiên mình sẽ lấy ô thứ nhất là a[6; 4], thì ô tiếp theo sẽ khoanh vùng trong a[4->8; 3->5] đúng hok nào, như vậy khi liệt kê ra thì có rất nhiều mảng kiểu [3x2] trong vùng đó, sau đó chọn ô tiếp theo làm sao cho phù họp với những ô đã chọn trước nữa

@@
gì vậy trời, hại não quá…

Bài liên quan
0