题意: 给两个字符串,以及m个从字符a变换到b的代价,问把两个字符串变得相同的最小代价 思路: 将字符串变换的代价当做一条有向边建图,之后跑floyd,得到从字符i变成j的最小代价dis[i][j] 之后遍历两个字符串的每一位,不相同的话枚举变成什么字符所需要的代价最小,如果找不到这样一个中间点使得 ...
分类:
其他好文 时间:
2020-02-06 23:23:18
阅读次数:
69
Floyd() 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int N = ???; 5 const int INF = 0x3f3f3f3f; 6 int n, m; 7 int a, b, x; 8 int dis[N][ ...
分类:
其他好文 时间:
2020-02-05 11:44:17
阅读次数:
47
一般ACM或者笔试题的时间限制是1秒或2秒。在这种情况下,C++代码中的操作次数控制在 107107 为最佳。 下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择: n≤30, 指数级别, dfs+剪枝,状态压缩dpn≤100 => O(n3),floyd,dpn≤1000 => O(n2) ...
分类:
编程语言 时间:
2020-02-03 22:35:29
阅读次数:
89
求解最短路的四个算法及其优化 [TOC] 1.Dijkstra算法 Dijkstra很好的运用了贪心算法,其思想是一直找离已加入顶点集合的最短边,更新邻点,下面是实现代码: 【题意】:给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从 ...
分类:
编程语言 时间:
2020-02-02 15:53:28
阅读次数:
75
(1)进程的概念(Dijkstra) 进程是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和调度的基本单位。 (2)进程与程序的联系与区别 ① 程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。 ② ...
分类:
编程语言 时间:
2020-02-02 13:32:47
阅读次数:
77
深搜和广搜是图很多算法的基础,很多图的算法都是从这两个算法中启发而来。 深搜简单地说就是直接一搜到底,然后再回溯,再一搜到底,一直如此循环到没有新的结点。 广搜简单地说就是一层一层的搜,像水的波纹一样往外面扩散,扩散到最外层搜索也就完成了。 prim最小生成树、Dijkstra单源最短路径算法都使用 ...
分类:
编程语言 时间:
2020-02-01 21:24:01
阅读次数:
201
1.0 Floyd(),简单粗暴,三重循环遍历,可求多源两点距离,但毕竟复杂度高,不适合过大的图。 2.0 Bellman(),借用一个(存放起点u、终点v、权值w的)结构体edge,遍历次数取决于边的个数*节点个数n,将复杂的三重循环,缩小到O(nm)的复杂度。 2.1 在Bellman()的基础 ...
分类:
其他好文 时间:
2020-02-01 21:14:27
阅读次数:
58
1 #include<bits/stdc++.h> 2 #include<vector> 3 #include<queue> 4 using namespace std; 5 6 const int inf = 0x3f3f3f3f; 7 const int num = ???; 8 struct ...
分类:
其他好文 时间:
2020-02-01 20:57:40
阅读次数:
50
Floyd算法求的是图的任意两点之间的最短距离 下面是Floyd算法的代码实现模板: const int INF = 10000000; const int maxv = 200; // maxv为最大顶点数 int n, m; // n 为顶点数,m为边数 int dis[maxv][maxv]; ...
分类:
编程语言 时间:
2020-01-31 12:30:24
阅读次数:
84
最短路径 1.概念 单源最短路径 单源最短路径实际是计算源点到其他各个顶点的最短路径的长度,常见算法有dijkstra算法 全局最短路径 全局最短路径实际是计算每个源点到其他各个顶点的最短路径的长度,我们可以调用dijkstra算法N次(这样没有Floyd算法快),常见解决全局最短路径的方法是Flo ...
分类:
编程语言 时间:
2020-01-31 10:21:29
阅读次数:
79