Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาความยาวโซ่คู่สูงสุดใน C++


มีโซ่ของคู่ตัวเลข ในแต่ละคู่มีจำนวนเต็มสองจำนวน ตัวแรกน้อยกว่าตัวที่สอง เสมอ กฎเดียวกันใช้กับการสร้างโซ่ คู่ (x, y) สามารถเพิ่มหลังคู่ (p, q) ได้ก็ต่อเมื่อ q < x

เพื่อแก้ปัญหานี้ เราต้องเรียงคู่ที่ให้มาในลำดับเพิ่มของตัวแรก จากนั้นเปรียบเทียบตัวที่สองของคู่กับตัวแรกของคู่ถัดไป

อินพุต − โซ่ของคู่ตัวเลข {(5, 24), (15, 25), (27, 40), (50, 60)}

เอาต์พุต − ความยาวโซ่สูงสุดตามเกณฑ์ คือ 3

อัลกอริทึม

maxChainLength(arr, n) each element of chain will contain two elements a and b Input: อาร์เรย์ของคู่ จำนวนรายการ Output: ความยาวสูงสุด Begin   define maxChainLen array of size n, and fill with 1   max := 0   for i := 1 to n, do     for j := 0 to i-1, do       if arr[i].a > arr[j].b and maxChainLen[i] < maxChainLen[j] + 1         maxChainLen[i] := maxChainLen[j] + 1     done   done   max := maximum length in maxChainLen array   return max End

ตัวอย่าง

#include<iostream> #include<algorithm> using namespace std; struct numPair{ //define pair as structure   int a;   int b; }; int maxChainLength(numPair arr[], int n){   int max = 0;   int *maxChainLen = new int[n]; //create array of size n   for (int i = 0; i < n; i++ ) //Initialize Max Chain length values for all indexes     maxChainLen[i] = 1;   for (int i = 1; i < n; i++ )     for (int j = 0; j < i; j++ )       if ( arr[i].a > arr[j].b && maxChainLen[i] < maxChainLen[j] + 1)         maxChainLen[i] = maxChainLen[j] + 1;       // maxChainLen[i] now holds the max chain length ending with pair i   for (int i = 0; i < n; i++ )     if ( max < maxChainLen[i] )       max = maxChainLen[i]; //find maximum among all chain length values     delete[] maxChainLen; //deallocate memory   return max; } int main(){   struct numPair arr[] = {{5, 24},{15, 25},{27, 40},{50, 60}};   int n = 4;   cout << "Length of maximum size chain is " << maxChainLength(arr, n); }

ผลลัพธ์

Length of maximum size chain is 3