华为实习生机试2017.03第三题
来源:互联网 发布:丰田致享 知乎 编辑:程序博客网 时间:2024/04/30 02:47
题目描述:
共有1,2,3,4,5,6个城市,一个人长驻城市5,需要坐飞机到其他城市出差。题目给定各个城市之间的飞行时间。
当机场出现大雾时,不能从该城市出发,其他城市也不能到达该城市。
输入目的城市,与大雾城市,输出飞行时间,及路径。
当不可达时,飞行时间为1000,路径输出“[]”
解题思路,按题目给出的数据,初始化数组,不可达时设为-1,再判断输入的大雾城市。如果大雾城市为5,直接输出1000与“[]”即可,若不是,采用最短路径求法,求出最短路径。
#include <stdio.h>#include <string.h>int dijkstrapath(int graph[6][6],int dist[6],int path[6],int v){ int i,j,k,min; int visited[6]={0,0,0,0,0,0}; //visited数组用来存储顶点是否访问,0为未访问 //初始化 for(i=0;i<6;i++) { if(graph[v][i]>0&&i!=v) //如果顶点与起始点相邻,则更新dist[i]的值 { dist[i]=graph[v][i]; path[i]=v; } else{ //如果不相邻,则将dist[i]的值设为1000 dist[i]=1000; path[i]=-1; } } visited[v]=1; //初始化后,将起始顶点设为已访问 //开始循环求出剩下的路径 for(i=1;i<6;i++) { //先找出这次循环中路径最短的点 min=1000; for(j=0;j<6;j++){ if(dist[j]<min&&visited[j]==0) { min=dist[j]; k=j; } } //k为此轮找出的节点 visited[k]=1; //此时min中存储的为起始节点到节点k的最短距离。 //更新dist[i]的值,如果dist[i]<min+graph[i][j],则更新。 for(j=0;j<6;j++){ if(visited[j]==0&&graph[k][j]>0&&graph[k][j]+min<dist[j]){ dist[j]=graph[k][j]+min; path[j]=k; } } }}int main(){ //初始化矩阵 int graph[6][6]={0,2,10,5,3,-1,-1,0,12,-1,-1,10,-1,-1,0,-1,7,-1,2,-1,-1,0,2,-1,4,-1,-1,1,0,-1,3,-1,1,-1,2,0}; int dist[6],path[6]; int result[6]={0,0,0,0,0,0}; int i,j; int des,fog; scanf("%d",&des); scanf("%d",&fog); if(fog==5){ printf("1000\n[]\n"); return 0; } for(i=0;i<6;i++) if(i!=fog-1){ graph[i][fog-1]=-1; graph[fog-1][i]=-1; } //起始点为顶点5 dijkstrapath(graph,dist,path,4); j=des-1; printf("%d\n",dist[des-1]); if(dist[des-1]==1000) printf("[]\n"); else{ i=5; while(path[j]!=4) { result[i]=path[j]+1; i--; j=path[j]; } printf("[5,"); for(i=0;i<6;i++) if(result[i]!=0) printf("%d,",result[i]); printf("%d]\n",des); } return 0;}
1 0
- 华为实习生机试2017.03第三题
- 2014华为校招实习生机试样题【part 2】
- 2017华为实习生机试题--任务调度
- 将一个字符串中每个单词逆序输出(2014年西安华为实习生机试第二题)
- 华为西安2015实习生机试题基础题--------求输入的五个数字中频率最高的,输出数字和次数
- 唯品会——java开发实习生机试
- 华为2013实习上机题
- 2014华为招聘机试第三题
- 华为2012机试第三题
- 笔试真题解析 ALBB-2015 算法工程师实习生机试
- 16年华为春季实习生机试题
- 华为2015年实习招聘机试
- 华为20170317实习机试答案
- 华为2016实习笔试编程题--生日礼物
- 华为2017年实习招聘上机题
- 华为机试第三篇
- 华为笔试题第三道
- 华为机试题第三题
- codeforces 788C The Great Mixing (bitset优化dp、bfs)
- 厨房防潮的要素
- datax hbase writer versionColumn/rowkeyColumn相关配置的解释
- Java虚拟机
- <Linux>Linux指令(不定时更新)
- 华为实习生机试2017.03第三题
- WebSite下创建webapi
- [Leetcode] 88. Merge Sorted Array 解题报告
- 学习运维——设备的访问和挂载
- 究竟什么才是评判笔记本电脑好坏的唯一标准
- 阈值分割
- TED如何和压力做朋友(第二天)
- 翻转链表
- 关于互联网访问DNS