华为机试题-地铁换乘

来源:互联网 发布:xp开启网络共享 编辑:程序博客网 时间:2024/04/27 23:04

主要用到了图论中的求最短路径算法,这里用到的是floyd算法

#include <iostream>#include <cstring>using namespace  std;int dis[35][35];int INF=65535;char station[35][4]={"A1","A2","A3","A4","A5","A6","A7","A8","A9","T1","A10","A11","A12","A13","T2","A14","A15","A16","A17","A18","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","B13","B14","B15"};void Init(){int i,j;for(i=0;i<35;i++)for(j=0;j<35;j++){if(i==j)dis[i][j]=0;else dis[i][j]=INF;}for(i=1;i<20;i++){dis[i][i-1]=1;dis[i-1][i]=1;}dis[0][19]=1;dis[19][0]=1;//环线,最后一站和第一站相连for(i=21;i<25;i++){dis[i][i-1]=1;dis[i-1][i]=1;}dis[24][9]=1;dis[9][24]=1;//换乘dis[25][9]=1;dis[9][25]=1;for(i=26;i<30;i++){dis[i][i-1]=1;dis[i-1][i]=1;}dis[29][14]=1;dis[14][29]=1;//换乘dis[30][14]=1;dis[14][30]=1;for(i=31;i<35;i++){dis[i][i-1]=1;dis[i-1][i]=1;}return;}void Floyd(){int i,j,k;for(k=0;k<35;k++)for(i=0;i<35;i++)for(j=0;j<35;j++)if(dis[i][k]!=INF&&dis[k][j]!=INF&&dis[i][j]>dis[i][k]+dis[k][j])dis[i][j]=dis[i][k]+dis[k][j];return;}int main(){char start[4],end[4];while(cin>>start){cin>>end;Init();Floyd();int i,j;for(i=0;strcmp(station[i],start);i++);//找到站点对应的位置for(j=0;strcmp(station[j],end);j++);//cout<<dis[i][j]+1<<endl;}return 0;}


0 0