CODEVS 1079回家
来源:互联网 发布:淘宝卖家需要多少钱 编辑:程序博客网 时间:2024/09/21 09:02
#include<stdio.h>#include<iostream>using namespace std;int youniu[55],youdian[55],g[55][55],dis[55],book[55];int mmin,value,v,u,p;char a,b;const int inf = 1000000000;int main(){ freopen("1079.in","r",stdin); freopen("1079.out","w",stdout); scanf("%d",&p); for(int i=1;i<=52;i++)//初始化图 for(int j=1;j<=52;j++) if(i==j) g[i][j]=0; else g[i][j]=inf; for(int i=1;i<=p;i++){ scanf("\n%c %c %d",&a,&b,&value);//注意读入换行符!!! if(a==b) continue; if(a=='Z'){//1号是Z,2~26号是A~Y,27~52号是a~z u=1; } else if(a>='A'&&a<'Z'){ u=a-'A'+2; youniu[u]=1;//大写有牛 } else if(a>='a'&&a<='z'){ u=a-'a'+1+26; youniu[u]=0;//小写没牛 } if(b=='Z'){ v=1; } else if(b>='A'&&b<'Z'){ v=b-'A'+2; youniu[v]=1;//大写有牛 } else if(b>='a'&&b<='z'){ v=b-'a'+1+26; youniu[v]=0;//小写没牛 } youdian[u]=1;//有点 youdian[v]=1;//有点 if(g[u][v]<=value||g[v][u]<=value) continue; else{//无向图!无向图!无向图!IMPORTANT THINGS SAY THREE TIMES!!! g[u][v]=value; g[v][u]=value; } } dis[1]=0; for(int i=1;i<=52;i++)//初始化dis if(youdian[i]==1) dis[i]=g[1][i]; else dis[i]=inf; for(int i=1;i<=52;i++) book[i]=0; book[1]=1; //下面是Dijkstra for(int i=1;i<=52;i++){//遍历全部的点 if(youdian[i]!=1) continue;//确保该点存在 mmin=inf; for(int j=1;j<=52;j++){//找出dis值最小的节点u if(book[j]==0&&dis[j]<mmin){ mmin=dis[j]; u=j; } } book[u]=1;//找到了就标记为找到了 for(v=1;v<=52;v++){ if(youdian[i]!=1) continue; if(g[u][v]<inf){//从u到v if(dis[v]>dis[u]+g[u][v]) dis[v]=dis[u]+g[u][v]; } } } mmin=inf; for(int i=1;i<=52;i++){ if(youniu[i]==1){ if(dis[i]<mmin){ mmin=dis[i]; u=i; } } } //调试/*for(int i=1;i<=52;i++){ cout<<dis[i]<<"\n"; } for(int i=1;i<=52;i++){ for(int j=1;j<=52;j++) if(g[i][j]<inf) printf("%d ",g[i][j]); else printf("inff "); printf("\n"); }*/ printf("%c %d",u-2+'A',mmin);//输出位置肯定为大写字母! return 0;}
题解:使用邻接矩阵的Dijkstra,数据在读入方面加强了难度,而并未在数据的时间复杂度上增难,所以邻接矩阵可不超时。
原因:全图最多52个节点而数据最大的边的数量为10000,所以该图不是一个稀疏图,使用邻接表、堆、优先队列的做法并不讨巧。
0 0
- CODEVS 1079回家
- 【codevs 1079】回家
- CODEVS 1079 回家
- 【codevs 1079】回家
- Codevs 1079 回家 最短路 spfa || dijkstra
- codevs 1079 回家(最短路)
- codevs 1079 回家 Floyd 解题报告
- 1079 回家
- 1079 回家 题解
- CODE[VS] 1079 回家
- 回家
- 回家
- 回家
- 回家
- 回家
- 回家
- 回家
- 回家
- 112象棋(12)
- Java中Properties类的操作
- 随机化算法(二)
- Android中处理崩溃异常和记录日志
- 静态链接库与动态链接库
- CODEVS 1079回家
- Java SE和Java EE的区别
- 【转】STM32 FSMC的用法--LCD
- https和http的区别!
- iOS单方向禁止UITableView滑动,禁止向上或向下滑动
- python 脚本 自动创建年月日目录
- AudioRecord
- Java 打jar包
- Android 项目eclipse、Android Studio目录结构分析