HDOJ 1879 继续畅通工程,HDOJ 1233还是畅通工程类似;HDOJ 图论相关题目:
1869 六度分离
1863 畅通工程
1875 畅通工程续
1301 Jungle Roads
2066 一个人的旅行
2112 HDU Today
……
#include<iostream>
using namespace std;
#define N 1000
#define MaxVal INT_MAX
//INT_MAX是最大整数,当吃不准最大边值时使用
//邻接矩阵,mat[i][j]的值为MaxVal表示i到j无边,否则为i到j边上的权值
int mat[N][N];
int visited[N]; //辅助数组,各顶点访问标记
//辅助数组,dist[i]保存以i为终点的边的最小权值,扫描本数组可以判断是否连通图
int dist[N];
int n; //顶点数
//找以未访问过的顶点为终点的最小权值的边,找到返回该顶点编号,否则返回-1
int minVertex()
{
int i, next=-1, minDist=MaxVal;
for (i=0;i<n;i++)
{
if (visited[i]==1) continue; //若该顶点已访问过则结束本次循环
if (minDist>dist[i]) //若以i为终点的边权值更小则更新
{
minDist=dist[i];
next=i;
}
}
return next;
}
//从顶点s开始求连通图的最小生成树的代价
int Prim(int s)
{
int i, next, cost=0;
for(int i=0;i<n;i++)
{
dist[i]=mat[s][i];
}
visited[s]=1;
while(true) //连通图做n-1次循环
{
next=minVertex();
if (next==-1) break;
visited[next]=1; //找到以next为终点的边
cost += dist[next]; //亦可在本循环后累加dist数组
for (i=0; i<n; i++)//修正各未访问过的顶点为终点的边的权值
{
if (visited[i]==0 && mat[next][i]<dist[i]) //Dijkstra算法主要此处有区别
{
dist[i]=mat[next][i];
}
}
}
return cost;
}
bool run()
{
int i, j, total, x, y, w, s;
scanf("%d",&n);
if(n==0) return 0;
for(i=0; i<n; i++) //初始化
{
visited[i]=0;
for(j=0;j<n;j++)
{
mat[i][j]=MaxVal;
}
mat[i][i]=0;
}
total=n*(n-1)/2;//先算出,可以提高一点时间效率
for(int i=0;i<total;i++) //输入边
{
scanf("%d%d%d%d",&x,&y,&w,&s);
if (s==1) w=0;
x--;
y--;
mat[x][y]=w;
mat[y][x]=w;
}
printf("%d\n", Prim(0) );
return 1;
}
int main()
{
while(run());
return 0;
}
分享到:
相关推荐
Prim算法与Kruskal算法 求最小生成树 源代码 实验报告 完整
用字符文件提供数据建立连通带权网络邻接矩阵存储¬¬结构。编写程序,用Prim算法求一棵最小生成树。要求输出最小生成树的各条边(用顶点无序偶表示)、各条边上的权值、最小生成树所有边上的权值之和。
PRIM算法,求最小生成树问题。PRIM算法,求最小生成树问题
代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小...
这个程序使用关于prim算法生成最小生成树的问题,是用c++语言实现的。
山东大学数据结构课设-基于prim算法生成最小生成树的可视化展示程序(下载即用).zip山东大学数据结构课设-基于prim算法生成最小生成树的可视化展示程序(下载即用).zip山东大学数据结构课设-基于prim算法生成最小...
设以无向网表示n个城市之间的通信网络建设计划,其中顶点表示城市,边上的权值表示造价,请设计程序求该通信网络总造价最低的建设方案,要求建立图的邻接矩阵,用Prim算法求最小生成树
深度遍历图,并用prim算法求最小生成树
用邻接矩阵的存储方式存储图 该图为无向图 用Prim算法构造最小生成树
prim算法求最小生成树 源程序 用C语言实现Prim算法并计算最小生成树及最小生成树的生成过程
数据结构教程实验--用Prim算法构造最小生成树
图论算法:最小生成树——Prim算法和Kruskal算法C 实现
编程实现Prim算法,基于最小堆数据结构,生成最小代价生成树。 (其中随机生成点和边,形成连通图) 根据输入的顶点数的不同,分析时间复杂度。
基于MATLAB的最小生成树Prim算法 源代码程序.rar
标题: 最小生成树 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后...
用文件存储无向图,然后分别使用Kruska和Prim算法求最小生成树。里面是完整的VS的项目,有详细注释,方便理解跟使用。
使用Prim算法编写的最小生成树(C语言),为更好地学习数据结构
prim算法求最小生成树