21xrx.com
2024-12-27 04:59:55 Friday
登录
文章检索 我的文章 写文章
C++贪心算法模板
2023-07-05 09:43:06 深夜i     --     --
C++编程 贪心算法 算法模板 数据结构 算法优化

贪心算法是一种常用的算法,可用于解决许多优化问题。贪心算法的核心思想是:在选择每一步的最优解时,不考虑该决策对于后续决策的影响。

以下是C++贪心算法的模板:

1.无权图最短路径

void dijkstra(int x) {

  memset(dis, 0x3f, sizeof(dis)); // 将某一段内容设置成指定的值

  dis[x] = 0; // 起点到起点的距离为零

  vis[x] = true; //标记节点被访问过

  for (int i = 1; i < n; i++) { //n为节点数

    int k = -1;

    for (int j = 1; j <= n; j++) {

      if (!vis[j] && (k == -1 || dis[k] > dis[j])) //找出一个没被访问过的离起点最近的点

        k = j;

    }

    vis[k] = true;

    for (int j = 1; j <= n; j++) { // 更新距离

      dis[j] = min(dis[j], dis[k] + graph[k][j]);

    }

  }

}

2.区间调度问题

int intervalSchedule(vector >& intervals) {

  if (intervals.empty()) return 0;

  sort(intervals.begin(), intervals.end(),

    [](const vector & l, const vector & r){ return l[1] < r[1]; });

  int count = 1; // 计数

  int end = intervals[0][1];

  for (auto& inter : intervals) {

    if (inter[0] >= end) {

      end = inter[1];

      count++;

    }

  }

  return count;

}

3.分配饼干

int findContentChildren(vector & g, vector & s) {

  sort(g.begin(), g.end());

  sort(s.begin(), s.end());

  int i = 0, j = 0;

  int count = 0;

  while (i < g.size() && j < s.size()) {

    if (g[i] <= s[j]) {

      count++;

      i++;

      j++;

    } else {

      j++;

    }

  }

  return count;

}

以上是C++贪心算法的模板,贪心算法虽然看似简单,但实际上还是要结合具体问题考虑,可以尝试使用以上模板适用于不同的场景。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复