Trong một ma trận vuông có kích thước chẵn s
có s/4(s/2+1)
loại hình vuông có thể được phản ánh theo bảy cách khác nhau xung quanh ma trận. Ví dụ, một ma trận 10 x 10 có hình vuông độc đáo màu trong hình bên dưới:Thuật toán để phản ánh octant của ma trận vuông tất cả bảy cách
Những 15 ô vuông có thể được phản ánh xung quanh các trục ngang, dọc và đường chéo của ma trận trong 7 cách khác nhau.
Giả sử có các giá trị duy nhất được gán cho từng loại phần tử như vậy của mảng n x n trong đó n là số chẵn, cách hiệu quả nhất để điền ma trận (trong C hoặc Java) là gì? Nói cách khác, đưa ra một danh sách 15 giá trị trong bất kỳ cấu trúc nào bạn muốn, bạn cần phải cư trú phần còn lại của mảng 10 x 10 với 15 giá trị bằng phản xạ. Thuật toán nhanh nhất để làm điều này là gì?
Như một ví dụ, đây là lần thử đầu tiên của tôi tại đây (lưu ý rằng nó sử dụng mảng một-based):
public static int[][] valueSquare = new int[11][11];
public static int[][] valueSquareType = {
{ 0, 40, 2, 12, 15, 20 },
{ 0, 2, 1, 4, 8, 12 },
{ 0, 12, 4, 25, 20, 15 },
{ 0, 15, 8, 20, 22, 18 },
{ 0, 20, 12, 15, 18, 0 },
};
static {
for(int x = 1; x <= 5; x++) for(int y = 1; y <= 5; y++) valueSquare[ 11 - x ][ y ] = valueSquareType[x][y];
for(int x = 1; x <= 5; x++) for(int y = 1; y <= 5; y++) valueSquare[ 11 - x ][ 11 - y ] = valueSquareType[x][y];
for(int x = 1; x <= 5; x++) for(int y = 1; y <= 5; y++) valueSquare[ x ][ 11 - y ] = valueSquareType[x][y];
}
Một phản đối này là nó có một mảng khởi động dự phòng được phản ánh 3 cách , thay vì một mảng khởi động tối thiểu phản ánh 7 cách. Lý tưởng nhất, tôi muốn một mảng khởi động, chỉ với 15 giá trị chính. Ngoài ra, vòng lặp trong thử của tôi có thể không phải là cách tiếp cận nhanh nhất.
ma trận của bạn chỉ có '9' hàng, và tôi nghĩ rằng bạn đang thiếu một số dấu ngoặc ở đây: 's/4 (s/2 + 1)'? – IVlad
Chia sẻ nghiên cứu của bạn sẽ giúp mọi người. Hãy cho chúng tôi biết những gì bạn đã thử và tại sao nó không đáp ứng nhu cầu của bạn. Điều này chứng minh rằng bạn đã dành thời gian để cố gắng giúp bản thân, nó giúp chúng tôi không nhắc lại câu trả lời rõ ràng và hầu hết tất cả đều giúp bạn nhận được câu trả lời cụ thể và phù hợp hơn! Ngoài ra, hãy xem [cách yêu cầu] (http://stackoverflow.com/questions/how-to-ask) – Eregrith
Tại sao không viết một cách rõ ràng bảy vòng cần thiết để điền vào ma trận? Bằng cách làm điều này đúng, bạn chỉ xem xét từng chỉ mục một cách chính xác một lần và do đó chỉ thực hiện các bài tập cần thiết. – vib