当前位置:   article > 正文

最优乘车(简单最短路)

最优乘车

传送门:最优乘车

思路;每一条路径上前面的点到后面的距离都是1,可以转换成最短路问题,最后求出的次数是最小乘车次数,减1就是最小换乘次数。

注意输入较特殊,用stringstream输入流进行输入

代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<sstream>
  4. #define x first
  5. #define y second
  6. using namespace std;
  7. typedef pair<int,int>PII;
  8. const int N=3010;
  9. int d[N][N];
  10. int dist[N];
  11. int n,m;
  12. int q[N];
  13. void bfs()
  14. {
  15. memset(dist,0x3f,sizeof dist);
  16. dist[1]=0;
  17. int hh=0,tt=1;
  18. q[0]=1;
  19. while(hh!=tt)
  20. {
  21. int t=q[hh++];
  22. if(hh==N)
  23. hh=0;
  24. for(int i=1;i<=m;i++)
  25. {
  26. if(dist[i]>dist[t]+1&&d[t][i])
  27. {
  28. dist[i]=dist[t]+1;
  29. q[tt++]=i;
  30. if(tt==N)
  31. tt=0;
  32. }
  33. }
  34. }
  35. }
  36. int main()
  37. {
  38. string b;
  39. cin>>n>>m;
  40. int a[510];
  41. int cnt=1;
  42. getchar();
  43. for(int i=1;i<=n;i++)
  44. {
  45. getline(cin,b);
  46. stringstream ssin(b);
  47. int cnt=1,p;
  48. while(ssin>>p) a[cnt++]=p;
  49. for(int i=1;i<cnt;i++)
  50. for(int j=i+1;j<cnt;j++)
  51. d[a[i]][a[j]]=1;
  52. }
  53. bfs();
  54. if(dist[m]>=0x3f3f3f3f)
  55. cout<<"NO";
  56. else
  57. cout<<max(dist[m]-1,0);
  58. return 0;
  59. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/582855
推荐阅读
相关标签
  

闽ICP备14008679号