该文章长期更新
1、Dijkstra
介绍:求源点到其他所有点的最短路径
实例模板:
函数使用介绍:
第一个参数:为所有边权集合:eg:times = [[2,1,1],[2,3,1],[3,4,1]] ,解释【2,1,1】表示2到1点的距离为1,其他类似
第二个参数:表示有多少个节点
第三个参数表源点是第几个节点
函数返回一个距离数组,如dist[i]表源节点到i点的最短距离。
使用注意事项:函数返回的dist数组,下表0位置未使用,因此从1到n才是有意义的值
vector<int> Dijkstra(vector<vector<int>>& times, int n, int k)
{
int inf = INT_MAX / 2;
vector<vector<int>> map(n + 1, vector<int>(n + 1, inf));
for (auto& item : times)
{
map[item[0]][item[1]] = item[2];
}
vector<int> dist(n + 1, inf);
dist[k] = 0;
vector<bool> used(n + 1, false);
for (int i = 1; i <= n; i++)
{
int x = -1;
for (int j = 1; j <= n; j++)
{
if (!used[j] && (x == -1 || dist[j] < dist[x]))
x = j;
}
used[x] = true;
for (int j = 1; j <= n; j++)
{
dist[j] = min(dist[j], dist[x] + map[x][j]);
}
}
return dist;
}
2、冒泡排序
每一次排序,寻找一个最大值放在最后面,然后下一次进行的轮数减1;
函数使用方法:
第一个参数为数组的首指针
第二个参数为数组的长度
函数不需要返回,因为使用的是指针,因此直接修改了原数组的排序
void maopao(int* arr, int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tem = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tem;
}
}
}
}
|