01/10/2018, 13:37

Cần giúp đỡ bài toán tìm phần tử trên mảng 2 chiều bằng ngôn ngữ C

Em có 2 mảng 2 chiều như hình.

Xử lý trên mỗi hàng. : Tìm vị trí của phần tử của mảng ABC trên mảng P.
ví dụ: như hàng 1 : kết quả sẽ là 4 1 2 3 5, cứ như vậy cho đến hết hàng.
Em cám ơn ạ.

rogp10 viết 15:43 ngày 01/10/2018

Hay nói cách khác là tìm hoán vị biến P[i] thành ABC[i] (với đk P[i] luôn là hoán vị của ABC[i]).

Nobita viết 15:51 ngày 01/10/2018

vâng ạ, em dùng từ chưa được chuẩn lắm ạ.

明玉 viết 15:47 ngày 01/10/2018

lấy từng hàng của P, đánh index vào rồi sort là ra đúng kết quả mà ?

Nobita viết 15:44 ngày 01/10/2018

nếu mà có phần tử trùng nhau thì xử lý thế nào vậy anh., ý em là mang ABC và P có một số phần tử giống nhua nhưng mảng xuất gia vẫn là một hoán vị đấy anh

Nobita viết 15:52 ngày 01/10/2018

êm định làm như thế nay nhưng vẫn không ổn

    for(int i = 0 ; i < number_Population ; i++) {
            mark[number_vertex2]={0};
        for(int j = 0 ; j < number_vertex2 ; j++) {

                for(int k = 0 ; k < number_vertex2;k++) {
                    if(mark[k]==0) {
                        if(abc[i][j]==P[i][k]) {
                                R[i][j] = k + 1;
                                mark[k] = 1;
                            }
                    } else {
                        continue;
                    }
                }
        }
    }

trong đó number_Population và numbertex là kích thước mảng ABC và P
mảng mark để đánh dấu những ví trị đã chọn rồi, và nếu trùng vị trí thì bỏ qua, so sánh tiếp cái sau, mà chạy vẫn không đúng.

明玉 viết 15:49 ngày 01/10/2018

Mình thấy đơn giản mà, ABC đều chứa các hàng đã được sắp xếp từ lớn tới nhỏ.
Ví dụ hàng đầu tiên:

int a[] = {76, 39, 24, 99, 19};

Chuyển đổi sang dạng mảng có đánh index:

struct Element {
   int value;
   int index;
};
int a[] = {76, 39, 24, 99, 19};
const int len = sizeof(a)/sizeof(a[0]);
Element b[len];
for (int i = 0; i < len; i++) {
   b[i].value = a[i];
   b[i].index = i + 1;
}
// sắp xếp b theo cách mà bạn thích, sắp xếp theo value member
sort(b);
for (int i = 0; i < len; i++) {
   printf("%d\n", b[i].index);
} 
// 4
// 1
// 2
// 3
// 5
Nobita viết 15:39 ngày 01/10/2018

em cám ơn anh !!!

Bài liên quan
0