#include<iostream>
#include<cstdio>
#include<cstring>
#include<limits>
#include<vector>
using namespace std;
const int maxn=;
struct edge{
int to,cost;
edge(int t,int c){
this->to=t; this->cost=c;
}
};
void addEdge(vector<edge> &edgelist, vector<vector<int> > &G,int from,int to,int cost){
edge e = edge(to,cost);
edgelist.push_back(e);
G[from].push_back(edgelist.size()-);
}
void addDoubleEdge(vector<edge> &edgelist, vector<vector<int> > &G,int from,int to,int cost){
addEdge(edgelist,G,from,to,cost);
addEdge(edgelist,G,to,from,cost);
}
int dijkstra(vector<edge> edgelist,vector<vector<int> > G,int v,int END){
vector<int> d(G.size());
vector<int> vis(G.size());
for(int i=;i<vis.size();++i) vis[i]=false;
for(int i=;i<d.size();++i) d[i]=numeric_limits<int>::max();
for(int i=;i<G[v].size();++i){
edge e = edgelist[G[v][i]];
d[e.to] = e.cost;
} vis[v]=true; for(int i=;i<G.size();++i){
int Min=numeric_limits<int>::max(), k;
for(int j=;j<G.size();++j){
if(!vis[j] && d[j] < Min){
Min = d[j];
k = j;
}
}
vis[k]=true; for(int j=;j<G[k].size();++j){
edge e = edgelist[G[k][j]];
if(!vis[e.to] && d[k] + e.cost < d[e.to]) d[e.to] = d[k] + e.cost;
}
}
return d[END];
}
int prim(vector<edge> edgelist,vector<vector<int> > G,int v){
int overall_cost = ;
vector<int> lowcost(G.size());
vector<int> closet(G.size());
vector<int> vis(G.size());
for(int i=;i<vis.size();++i) vis[i]=false;
for(int i=;i<lowcost.size();++i) lowcost[i]=numeric_limits<int>::max(); for(int i=;i<G[v].size();++i){
edge e = edgelist[G[v][i]];
lowcost[e.to] = e.cost;
closet[e.to] = v;
} vis[v]=true;
for(int i=;i<G.size();++i){
int Min=numeric_limits<int>::max(), k;
for(int j=;j<G.size();++j){
if(!vis[j] && lowcost[j] < Min){
Min = lowcost[j];
k = j;
}
}
cout<< Min <<endl;
overall_cost += Min;
vis[k] = true;
//closet[k] = v;
for(int j=;j<G[k].size();++j){
edge e = edgelist[G[k][j]];
if(!vis[e.to] && e.cost < lowcost[e.to]){
lowcost[e.to] = e.cost;
closet[e.to] = k;
}
}
}
return overall_cost;
}
void buildMap(vector<edge> &edgelist, vector<vector<int> > &G){
addDoubleEdge(edgelist, G, , , );
addDoubleEdge(edgelist, G, , , );
addDoubleEdge(edgelist, G, , , ); addDoubleEdge(edgelist, G, , , );
addDoubleEdge(edgelist, G, , , );
addDoubleEdge(edgelist, G, , , ); addDoubleEdge(edgelist, G, , , );
addDoubleEdge(edgelist, G, , , );
addDoubleEdge(edgelist, G, , , );
addDoubleEdge(edgelist, G, , , ); /*
addEdge(edgelist,G,0,2,6);
addEdge(edgelist,G,0,1,4);
addEdge(edgelist,G,0,3,6); addEdge(edgelist,G,1,2,1);
addEdge(edgelist,G,1,4,7); addEdge(edgelist,G,2,5,4);
addEdge(edgelist,G,2,4,6); addEdge(edgelist,G,3,5,5);
addEdge(edgelist,G,3,2,2); addEdge(edgelist,G,4,6,6); addEdge(edgelist,G,5,4,1);
addEdge(edgelist,G,5,6,8);
*/
}
int main(){
vector<edge> edgelist;
vector<vector<int> > G(maxn); buildMap(edgelist, G); cout<<endl<<dijkstra(edgelist, G, , )<<endl; cout<<prim(edgelist, G, )<<endl; return ; }

algorithm@ dijkstra algorithm & prim algorithm的更多相关文章

  1. prim algorithm

    function re=biaoji(j,biao) %判断j点是否已被标记 l=length(biao); for i=1:l if j==biao(i) re=1; return; end end ...

  2. Dijkstra和Prim算法的区别

    Dijkstra和Prim算法的区别 1.先说说prim算法的思想: 众所周知,prim算法是一个最小生成树算法,它运用的是贪心原理(在这里不再证明),设置两个点集合,一个集合为要求的生成树的点集合A ...

  3. dijkstra spfa prim kruskal 总结

    最短路和最小生成树应该是很早学的,大家一般都打得烂熟,总结一下几个问题 一  dijkstra  O((V+E)lgV) //V节点数 E边数 dijkstra不能用来求最长路,因为此时局部最优解已经 ...

  4. Algorithm --> Dijkstra和Floyd最短路径算法

    Dijkstra算法 一.最短路径的最优子结构性质 该性质描述为:如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的一个中间顶点,那么P(k,s)必 ...

  5. [algorithm] Dijkstra双栈算法表达式求值算法

    一.原理 Dijkstra所做的一个算法,双栈求值,用两个栈(一个保存运算符,一个用于保存操作数), 表达式由括号,运算符和操作数组成. (1).将操作数压入操作数栈 (2).将运算符压入运算符栈: ...

  6. A Fast Priority Queue Implementation of the Dijkstra Shortest Path Algorithm

    http://www.codeproject.com/Articles/24816/A-Fast-Priority-Queue-Implementation-of-the-Dijkst http:// ...

  7. hdu, KMP algorithm, linear string search algorithm, a nice reference provided 分类: hdoj 2015-07-18 13:40 144人阅读 评论(0) 收藏

    reference: Rabin-Karp and Knuth-Morris-Pratt Algorithms By TheLlama– TopCoder Member https://www.top ...

  8. 全排列算法(字典序法、SJT Algorithm 、Heap's Algorithm)

    一.字典序法 1) 从序列P的右端开始向左扫描,直至找到第一个比其右边数字小的数字,即. 2) 从右边找出所有比大的数中最小的数字,即. 3) 交换与. 4) 将右边的序列翻转,即可得到字典序的下一个 ...

  9. [Algorithm] Maximum Contiguous Subarray algorithm implementation using TypeScript / JavaScript

    Naive solution for this problem would be caluclate all the possible combinations: const numbers = [1 ...

随机推荐

  1. Style 的优先级

    Dependency Property(简称DP)是WPF的核心,Style就是基于Dependency Property的,关于DP的内幕,请参见深入WPF--依赖属性.Style中的Setter就 ...

  2. oracle计算年龄

    入院年龄按入院时间和出生日期进行计算 select * from pat_visit_v v ) ; 来自为知笔记(Wiz)

  3. hdu 1427 dfs

    速算24点 题意:随机给你四张牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','*','/'运算符以及括号改变运算 顺序,使得最终 ...

  4. 关于Qt5 UI设计的一些小知识

      (1) 获取textEdit中的值   QString str = ui->textedit->toPlainText(); // 这是普通文本 p=str.toInt();     ...

  5. Mac OS系统 - 将视频转换成gif

    github中开源轻量级应用:droptogif

  6. python 批量修改图片大小

    一个文件夹下面有好多图片格式是jpg大小是1920*1080,把它们处理成1280*720并按原先图片的名保存在另一路径下这里首先要找到给定路径下所有的图片文件,然后在修改图片文件的大小,这里用到PI ...

  7. Oracle数据库安装完成之后的启动操作

    由于是菜鸟,在 完成Oracle数据库的安装之后,不知道该怎么启动.在经过一番折腾之后明白了其中的一些道理,总结如下: 其实Oracle数据库和Mysql数据库的启动都是相同的原理. Mysql数据库 ...

  8. BZOJ 4004 [JLOI 2015] 装备购买 解题报告

    哎这个题 WA 了无数遍...果然人太弱... 首先我们把这些装备按照花费从小到大排序,然后依次考虑是否能买这个装备. 至于这样为什么是对的,好像有一个叫拟阵的东西可以证明,然而我不会.TATQAQ ...

  9. Matlab实现K-Means聚类算法

    人生如戏!!!! 一.理论准备 聚类算法,不是分类算法.分类算法是给一个数据,然后判断这个数据属于已分好的类中的具体哪一类.聚类算法是给一大堆原始数据,然后通过算法将其中具有相似特征的数据聚为一类. ...

  10. MySQL表结构为InnoDB类型从ibd文件恢复数据

    客户的机器系统异常关机,重启后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,只能想办法从数据库文件当中恢复,查找资料,试验各种方法,确认下面步骤可行: ...