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

ค้นหาระยะทางสูงสุดระหว่างเมืองและสถานีใด ๆ ใน C++


แนวคิด

สำหรับจำนวนเมืองที่กำหนด N ที่มีหมายเลขตั้งแต่ 0 ถึง N-1 และเมืองที่สถานีตั้งอยู่ หน้าที่ของเราคือกำหนดระยะทางสูงสุดระหว่างเมืองใดๆ และสถานีที่ใกล้ที่สุด ควรสังเกตว่าสามารถกำหนดเมืองที่มีสถานีในลำดับใดก็ได้

อินพุต

numOfCities = 6, stations = [2, 4]

ผลลัพธ์

2

อินพุต

numOfCities = 6, stations = [4]

ผลลัพธ์

4
  • รูปต่อไปนี้แสดงถึงตัวอย่างแรกที่มี 6 เมืองและเมืองที่มีสถานีที่เน้นด้วยสีเขียว ดังนั้น ในกรณีนี้ เมืองที่ไกลที่สุดจากสถานีที่ใกล้ที่สุดคือ 0 ที่ระยะห่าง 2 ดังนั้น ระยะทางสูงสุดคือ 1

ค้นหาระยะทางสูงสุดระหว่างเมืองและสถานีใด ๆ ใน C++

  • ในตัวอย่างที่สอง เมืองที่ไกลที่สุดจากสถานีที่ใกล้ที่สุดคือ 0 ซึ่งเป็นระยะทาง 4 ดังนั้นระยะทางสูงสุดคือ 4

ค้นหาระยะทางสูงสุดระหว่างเมืองและสถานีใด ๆ ใน C++

วิธีการ

มีสามกรณีที่เป็นไปได้ในปัญหานี้ -

  • กรณีแรกระบุว่าเมืองที่ไกลที่สุดอยู่ระหว่างสองสถานี

  • กรณีที่สองระบุว่าเมืองที่ไกลที่สุดจะอยู่ทางด้านซ้ายของสถานีแรกเมื่อใด

  • กรณีสุดท้ายระบุว่าเมืองที่ไกลที่สุดอยู่ทางด้านขวาของสถานีสุดท้ายเมื่อใด

อัลกอริทึมต่อไปนี้ถูกนำมาใช้เพื่อแก้ปัญหาข้างต้น -

  • เราเริ่มต้นอาร์เรย์บูลีนขนาด N (จำนวนเมือง) ด้วย "เท็จ" หลังจากนั้นให้ทำเครื่องหมายค่าของเมืองด้วยสถานีเป็น True

  • ต่อไปเราจะเริ่มต้นตัวแปร dist ด้วย 0 เราต้องเริ่มต้นตัวแปรอื่น maxDist ที่มีค่าซึ่งเหมือนกับเมืองแรกที่มีสถานี (ใช้สำหรับกรณีที่สอง)

  • เริ่มวนรอบเมืองทั้งหมดทีละเมือง

  • มีการสังเกตว่าถ้าเมืองปัจจุบันมีสถานีแล้วกำหนดสูงสุดของ (dist+1)//2 และ maxDist ให้กับ maxDist (ใช้สำหรับกรณีแรก) นอกจากนี้ กำหนด 0 ให้กับ dist.

  • มิฉะนั้น เพิ่ม dist.

  • สุดท้าย คืนค่าสูงสุดของ dist และ maxDist (ใช้สำหรับกรณีที่สาม)

ตัวอย่าง

// C++ program to calculate the maximum
// distance between any city
// and its nearest station
#include<bits/stdc++.h>
using namespace std;
// Shows function to compute the maximum
// distance between any city and its nearest station
int findMaxDistance(int numOfCities1,int station1[],int N){
   // Used to initialize boolean list
   bool hasStation[numOfCities1 + 1] = {false};
   // Used to assign True to cities containing station
   for (int city1 = 0; city1 < N; city1++){
      hasStation[station1[city1]] = true;
   }
   int dist1 = 0;
   int maxDist1 = INT_MAX;
   for(int i = 0; i < N; i++){
      maxDist1 = min(station1[i],maxDist1);
   }
   for (int city1 = 0; city1 < numOfCities1; city1++){
      if (hasStation[city1] == true){
         maxDist1 = max((dist1 + 1) / 2, maxDist1);
         dist1 = 0;
   }
   else
      dist1 += 1;
   }
   return max(maxDist1, dist1);
}
//Driver code
int main(){
   int numOfCities1 = 6;
   int station1[] = {2,4};
   int N = sizeof(station1)/sizeof(station1[0]);
   cout << "Max Distance:" << findMaxDistance(numOfCities1,
   station1, N);
}

ผลลัพธ์

Max Distance:2