题目:
51 01 12 02 33 11 14 1000 10 1 Sample Output2分析:
最短路,结点少,直接floyd。增加总终点n,若某一城镇在海边,则其与n距离为零。
代码:
#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<ctype.h> //tower()#include<set> #include<map> #include<iomanip>// cout<<setprecision(1)<<fixed<<a;#include<vector> #include<cmath> #include<algorithm>#include<bitset>#include<limits.h>#include<stack>#include<queue>using namespace std;const int maxn=16;const int INF=0x3f3f3f3f;int n,d[maxn][maxn];int main(){ while(scanf("%d",&n)==1){ for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) d[i][j] = i==j?0:INF; for(int i=0;i<n;i++){//城镇编号为[0,n-1] int m,p; scanf("%d%d",&m,&p); if(p) d[i][n]=0; while(m--){ int u,dist; scanf("%d%d",&u,&dist); d[i][u]=dist; } } for(int k=0;k<=n;k++) for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) if(d[i][k]<INF && d[k][j]<INF) d[i][j]=min(d[i][j],d[i][k]+d[k][j]); printf("%d/n",d[0][n]); } return 0;}
新闻热点
疑难解答