C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

二次元でギフト包装アルゴリズムを実装するためのC++プログラム


ギフト包装アルゴリズムを2次元で実装するC++プログラムを開発します。ギフト包装アルゴリズムは、特定の点のセットの凸包を計算するためのアルゴリズムです。

アルゴリズム

Begin
   function convexHull() to find convex hull of a set of n points:
   There must be at least three points.
   Initialize the result.
   Find the leftmost point.
   Starting from leftmost point, keep moving counterclockwise
   until reach the start point again.
   Print the result.
End

サンプルコード

#include <iostream>
using namespace std;
#define INF 10000
struct P {
   int x;
   int y;
};
int orient(P a, P b, P c) {
   int v = (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y);
   if (v == 0)
      return 0; // colinear
      return (v >0) ? 1 : 2; // clock or counterclock wise
}
void convexHull(P points[], int m) {
   if (m < 3)//at least three points required
      return;
   int n[m];
   for (int i = 0; i < m; i++)
      n[i] = -1;
      int l = 0;//initialize result.
   for (int i = 1; i < m; i++)
      if (points[i].x < points[l].x)
         l = i; //find left most point
         int p = l, q;
   do {
      q = (p + 1) % m;
      for (int i = 0; i < m; i++)
         if (orient(points[p], points[i], points[q]) == 2)
            q = i;
            n[p] = q;
            p = q;
   } while (p != l);
   for (int i = 0; i < m; i++) {
      if (n[i] != -1)
         cout << "(" << points[i].x << ", " << points[i].y << ")\n";
   }
}
int main() {
   P points[] = {{0, 4}, {2, 1}, {2, 3}, {4, 1}, {3, 0}, {1, 1}, {7, 6}};
   cout << "The points in the convex hull are: ";
   int n = sizeof(points) / sizeof(points[0]);
   convexHull(points, n);
   return 0;
}

出力

The points in the convex hull are: (0, 4)
(4, 1)
(3, 0)
(1, 1)
(7, 6)

  1. バブルソートを実装するC++プログラム

    バブルソートは、比較ベースのソートアルゴリズムです。このアルゴリズムでは、隣接する要素が比較および交換されて、正しいシーケンスが作成されます。このアルゴリズムは他のアルゴリズムよりも単純ですが、いくつかの欠点もあります。このアルゴリズムは、多数のデータセットには適していません。並べ替えタスクの解決には時間がかかります。 バブルソート手法の複雑さ 時間計算量:最良の場合はO(n)、O(n 2 )平均および最悪の場合 スペースの複雑さ:O(1) Input − A list of unsorted data: 56 98 78 12 30 51 Output &mi

  2. 基数ソートを実装するC++プログラム

    基数ソートは、非比較ソートアルゴリズムです。この並べ替えアルゴリズムは、同じ位置と値を共有する数字をグループ化することにより、整数キーで機能します。基数は、記数法のベースです。 10進法では、基数または基数は10であることがわかっているので、いくつかの10進数を並べ替えるには、数値を格納するために10個の位取りボックスが必要です。 基数ソート手法の複雑さ 時間計算量:O(nk) スペースの複雑さ:O(n + k) Input − The unsorted list: 802 630 20 745 52 300 612 932 78 187 Output &minus