B - Networking——最小生成树_Prim算法(未堆优化)
2017-07-25 09:58
357 查看
Think:
1知识点:最小生成树_Prim算法(未堆优化)
2题意分析:
1>n个点,选择最优方案连成一个网络,注:初始给定边无限
2>即选择n-1条边将n个结点连通
3>边无限即稠密图,进而选择最小生成树Prim算法(未堆优化)
3反思:memset()初始化注意第三个参数应为sizeof(初始化数组)
4思考:稠密图,Prim算法(未堆优化)
vjudge题目链接
以下为Accepted代码
1>16ms
1知识点:最小生成树_Prim算法(未堆优化)
2题意分析:
1>n个点,选择最优方案连成一个网络,注:初始给定边无限
2>即选择n-1条边将n个结点连通
3>边无限即稠密图,进而选择最小生成树Prim算法(未堆优化)
3反思:memset()初始化注意第三个参数应为sizeof(初始化数组)
4思考:稠密图,Prim算法(未堆优化)
vjudge题目链接
以下为Accepted代码
1>16ms
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int inf = 0x3f3f3f3f; int e[104][104], vis[104], dis[104]; void Prim(int n); int main(){ int n, m, u, v, w; while(scanf("%d", &n) && n){ scanf("%d", &m); memset(e, inf, sizeof(e)); while(m--){ scanf("%d %d %d", &u, &v, &w); if(e[u][v] > w) e[u][v] = e[v][u] = w; } Prim(n); } return 0; } void Prim(int n){ int i, miv, v, num, sum; memset(vis, 0, sizeof(vis)); for(i = 1; i <= n; i++) dis[i] = e[1][i]; vis[1] = 1, dis[1] = 0, num = 1, sum = 0; while(num < n){ miv = inf; for(i = 1; i <= n; i++){ if(!vis[i] && dis[i] < miv){ miv = dis[i], v = i; } } vis[v] = 1, num++, sum += dis[v]; for(i = 1; i <= n; i++){ if(!vis[i] && e[v][i] < dis[i]) dis[i] = e[v][i]; } } printf("%d\n", sum); }
相关文章推荐
- java编写Prim算法实现最小生成树(LazyPrim算法的优化版)
- hiho 29 最小生成树三·堆优化的Prim算法
- prim算法最小生成树(优化)
- POJ-1287 Networking(最小生成树 prim算法)
- 最小生成树Prim算法 堆优化
- 最小生成树 堆优化的Prim算法
- hiho一下 第二十九周 最小生成树三·堆优化的Prim算法【14年寒假弄了好长时间没搞懂的prim优化:prim算法+堆优化 】
- hdu1233 还是畅通工程 最小生成树 Prim算法堆优化
- hihoCoder#1109 最小生成树三·堆优化的Prim算法
- 最小生成树(二)--prim算法实现以及堆优化
- hihoCoder 1109 最小生成树三·堆优化的Prim算法
- hihocoder1097、1109最小生成树(prim算法+堆优化)
- #1109 : 最小生成树三·堆优化的Prim算法
- hiho一下 第二十八周 最小生成树三·堆优化的Prim算法
- hihocoder #1109 最小生成树三·堆优化的Prim算法
- hiho刷题日记——第二十九天最小生成树三·堆优化的Prim算法
- prim算法最小生成树(未优化)
- HIHO #1109 : 最小生成树三·堆优化的Prim算法
- hihocoder 1109 : 最小生成树三·堆优化的Prim算法
- 最小生成树(Minimum Spanning Tree)(Prim算法)