1 solutions
-
0
C++ :
#include<cstdio> #include<algorithm> #define MAXN 99999999 using namespace std; int dis[100],tu[100][100];//从z出发的dis值和邻接矩阵 int p,vis[100];//道路数目、节点标记 char r; void di(int x,int y,int w)//存图 { if(tu[x][y]==0)//读入边 { tu[x][y]=w; tu[y][x]=w; } if(w<tu[x][y])//读入的第二条边比第一条边的权值小,就替换 { tu[x][y]=w; tu[y][x]=w; } } void dj()//迪杰斯特拉裸代码(好像是啊哈算法上面的??) { int u,min; for(int i=1;i<=51;i++) { min=MAXN; for(int j=1;j<=51;j++) { if(vis[j]==0&&dis[j]<min) { min=dis[j]; u=j; } } vis[u]=1; for(int v=1;v<=51;v++) { if(dis[v]>dis[u]+tu[u][v]&&vis[v]==0&&tu[u][v]<MAXN) dis[v]=dis[u]+tu[u][v]; } } } int main() { scanf("%d",&p); for(int i=1;i<=52;i++) for(int j=1;j<=51;j++) tu[i][j]=MAXN; vis[52]=1;//因为'Z'存图的时候是52,所以打上标记 for(int i=1;i<=p;i++)//借鉴楼上的读入 { char x,y;//两个点 int c;//权值 int xx,yy; scanf("\n%c %c %d",&x,&y,&c); if(x>='a'&&x<='z') xx=x-'a'+1; else xx=x-'A'+27; if(y>='a'&&y<='z') yy=y-'a'+1; else yy=y-'A'+27; di(xx,yy,c); } for(int i=1;i<=51;i++) dis[i]=tu[52][i]; dj();int hh=MAXN,point; for(int i=1;i<=51;i++)//判断大写并输出 { if(dis[i]<hh&&i>=27) { hh=dis[i]; point =i; } } r=point-27+'A'; printf("%c %d\n",r,hh); }
- 1
Information
- ID
- 10033
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By