zoukankan      html  css  js  c++  java
  • 最少换乘 之简化版

    将题目中要的   需要换的车数   换成  需要走的站数

    下面附上 本人的 渣渣代码

     1 /*主要是因为  这个题按照要求写不出来  就先写了个这  等等补上  完整的*/
     2 // 我的思路就是 用  vector去构建出来一个  有向图  然后开始广搜
     3 #include<stdio.h>
     4 #include<vector>
     5 #include<queue>
     6 #include<string.h>
     7 using namespace std;
     8 struct station
     9 {
    10     int step,n;
    11 }e;
    12 vector<int>v[505];   //   用于 构造 单向图
    13 queue<station>Q;        //  用于储存公交站
    14 int visited[505],mark,count,c;
    15 void map(int n)    // 开始构图
    16 {
    17     int q,i,j,a,b;  //  多弄几个标记变量
    18     a=b=0;
    19     char str[2000];
    20     for(i=0;i<n;i++)
    21     {
    22         gets(str);     //  开始 每一 行 收 集信息
    23         c=strlen(str);
    24         for(q=j=0;j<c;q++,j++)
    25         {
    26             while(str[j]!=' '&&j<c)  //  如果不是空格的话 就可以出去了
    27             {
    28                 a+=(str[j]-'0');  //
    29                 j++;
    30             }
    31             if(q!=0)  //   如果这是 第一次进来
    32             {
    33                 v[b].push_back(a);      //   不是第一次进来 上一次算出来的值  给了b ,这次的值是  a  这样就是  b 可以到a 但是   a  不能到 b   形成了单程路线
    34             }
    35             b=a;
    36             a=0;
    37         }
    38     }
    39 }
    40 void BFS(int n,int m)//  上面   map已经完成了 构图的 重任  下面就轮到 搜索了  再熟悉一下深搜和广搜的 区别
    41 {                               //   在这里 要得就是最短路 所以直接去进行广搜 就对了
    42     station q;
    43     int i;
    44     q.step=0;
    45     q.n=n;
    46     Q.push(q);
    47     while(!Q.empty())
    48     {
    49         station q1;
    50         q1=Q.front();
    51         for(i=0;i<v[q1.n].size()&&!visited[q1.n];i++)  //  将可以从 n1  到达的 地方一个一个的压进去   已经做过大本营的 标记一下不再 做
    52         {
    53             station q;
    54             q.n=v[q1.n][i];
    55             q.step=q1.step+1;
    56             Q.push(q);
    57         }
    58         visited[q1.n]=1;
    59         Q.pop();
    60         if(q1.n==m)
    61         {
    62             mark=q1.step;
    63         }
    64         if(mark!=0)
    65             break; ;
    66     }
    67     while(!Q.empty())
    68         Q.pop();
    69 }
    70 int main()
    71 {
    72     int t,n,m;
    73     scanf("%d",&t);
    74     while(t--)
    75     {
    76         memset(visited,0,sizeof(visited));
    77         memset(v,0,sizeof(v));
    78         scanf("%d%d",&n,&m);
    79         getchar();
    80         map(n);
    81         BFS(1,m);   //从第一站 开始
    82         if(mark!=0)
    83             printf("%d
    ",mark-1);
    84         else
    85             printf("NO
    ");
    86         mark=0;
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    构建git+gerrit+repo的Android代码服务器
    简单学习:repo入门
    git checkout 命令详解
    python学习第一天
    window下的git工具msysgit的使用
    git基本操作
    echarts 使用示例
    管道命令
    jquery修改文档结构
    JavaScript正则表达式
  • 原文地址:https://www.cnblogs.com/A-FM/p/5274894.html
Copyright © 2011-2022 走看看