道路重建
来源:互联网 发布:淘宝不允许好评返现 编辑:程序博客网 时间:2024/05/01 14:33
N个城市间有M条道路,每条道路连接两个不同的城市,并给出道路的长度。有一些道路被破坏,恢复一些道路,求出A到B建立连接要修复的最短路程。
Dijkstra算法。
#include<string.h>#include<cstdio>#include<cstdlib>using namespace std;const int maxn=101;const int maxint=1000000000;int N;int M;int D;int A,B;bool s[maxn];int dist[maxn],map1[maxn][maxn],map2[maxn][maxn];void dijk(int v,int g[101][101],int n){int i,j,u,temp;for(i=1;i<=n;i++){dist[i]=maxint;s[i]=false;}dist[v]=0;for(i=1;i<=n;i++){temp=maxint;for(j=1;j<=n;j++)if(!s[j]&&(dist[j]<temp)){u=j;temp=dist[j];}s[u]=true;for(j=1;j<=n;j++){if(!s[j]&&g[u][j]!=-1){if(dist[j]>dist[u]+g[u][j]){dist[j]=dist[u]+g[u][j];}}}}}int main(){int i,j,k;while(scanf("%d",&N),N){memset(map1,-1,sizeof(map1));for(i=1;i<=N;i++)map1[i][i]=0;scanf("%d",&M);while(M--){scanf("%d%d%d",&i,&j,&k);map1[i][j]=map1[j][i]=k;}for(i=1;i<=N;i++)for(j=1;j<=N;j++)if(map1[i][j]==-1)map2[i][j]=-1;else map2[i][j]=0;scanf("%d",&D);while(D--){scanf("%d%d",&i,&j);map2[i][j]=map2[j][i]=map1[i][j];}scanf("%d%d",&A,&B);dijk(A,map2,N);printf("%d\n",dist[B]);}return 0;}
阅读全文
0 0
- 道路重建
- 重建道路
- 道路重建
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 【图论】[luoguP3905]道路重建
- 洛谷P3905 道路重建
- 重建道路(树上背包)
- Luogu P3905 道路重建
- 一、树形dp(3)重建道路
- 树形DP 洛谷P1272 道路重建
- 【洛谷1272】重建道路(树形DP)
- [luogu1272]重建道路(树形dp)
- 【Luogu1272】重建道路(动态规划)
- 洛谷 p1272 重建道路 树形dp
- fabric 开发环境
- 葵花宝典 六
- jsp session
- jQuery
- HDU1073 Online Judge【输入输出+字符串】
- 道路重建
- 机器学习的动机与应用
- cc3200系列教程之制作bootloader简介
- linux之cut用法
- Gallery3d 学习笔记
- Java学习笔记-《Java程序员面试宝典》-第5章Java Web-5.3框架(5.3.1-5.3.2)
- python入门系列16―——格式化
- (OK) Android-x86-7.1.1/ kernel 4.4.62
- revit二次开发——自适应点的局部坐标系