hdu 1874 畅通工程续
来源:互联网 发布:折线统计图数据举例 编辑:程序博客网 时间:2024/06/16 14:59
题目:点击打开链接。
dijkstra,上代码。
#include<stdio.h>#include<string.h>#define INF 0x3f3f3f3f//定义一个比较大的值,表示此路不通int g[202][202],dis[202];bool vis[202];//下标对应的点被访问的情况void dijkstra(int s,int n){ for(int i=0;i<n;++i) { dis[i]=g[s][i];//初始化数组 vis[i]=false; } dis[s]=0;//对应起点与终点相同的情况。 vis[s]=true;//表示该点已被访问 for(int i=0;i<n;++i) { int mark=s;//可以是s也可以是别的负数。 int mindis=INF; for(int j=0;j<n;++j) { if(!vis[j]&&mindis>dis[j]) { mark=j; mindis=dis[j]; } }//找到当前情况下与起点距离最近的点,该距离为俩点之间最近的点。 if(mark==s)//剪枝,可以没有 break; vis[mark]=true;//中间的jiedian for(int j=0;j<n;++j) if(!vis[j]&&dis[j]>dis[mark]+g[mark][j]) dis[j]=dis[mark]+g[mark][j];//更新 }}int main(){ int m,n,a,b,x,s,t; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<n;++i) for(int j=0;j<n;++j) g[i][j]=INF;//初始化 for(int i=0;i<m;++i) { scanf("%d%d%d",&a,&b,&x); if(g[a][b]>x)//输入数据中两点之间可能有多个数据取最小的 { g[a][b]=x; g[b][a]=x; } } scanf("%d%d",&s,&t); dijkstra(s,n); printf("%d\n",dis[t]==INF?-1:dis[t]); } return 0;}
0 0
- HDU 1874 畅通工程续
- hdu 1874 畅通工程续
- hdu 1874 畅通工程续
- hdu 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- hdu 1874 畅通工程续
- hdu 1874 畅通工程续
- hdu 1874 畅通工程续
- hdu 1874 畅通工程续
- HDU 1874 畅通工程续
- hdu 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- hdu 1874(畅通工程续)
- DirectX9 创建顶点和索引缓存
- 练习随笔
- main(int argc,char *argv[] )参数输入
- 剑指offer-19 二叉树的镜像
- 百度算法更新之后对外链的要求解析
- hdu 1874 畅通工程续
- VMware虚拟机设置centos固定ip地址
- Tomcat相关
- 拷贝构造函数
- 数据结构 - 逻辑结构和存储结构
- UVA - 11258 String Partition
- 【每天十分钟,天天跟我学--excel2010应用大全】2、自定义功能区
- 项目管理
- 【mysql+xampps】Operation not allowed when innodb_forced_recovery > 0