1106---BFS找最短路径

来源:互联网 发布:javabean 数据库 编辑:程序博客网 时间:2024/06/10 07:51

题目内容
题目参考链接:https://www.patest.cn/contests/pat-a-practise/1106
题目分析
1.题目分析完是找最短路径,用BFS很好
2.注意与1079分别。博客链接:http://blog.csdn.net/zhanggirlzhangboy/article/details/78543299
3.1079是求叶子节点的路径,1106是求最短路径
代码如下

#include <iostream>#include <queue>#include <vector>#include <math.h>#include <stdio.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */using namespace std;const int MAX = 100000+5;vector< vector<int> > v(MAX);int ans[MAX];int num = 0;int BFS(int n){    queue<int> q;    q.push(n);    int level = -1;//记录层次     int min = MAX;    while(!q.empty()){        int size = q.size();        level++;        for(int i=0;i<size;i++){//类似树的层次遍历             int top = q.front();            q.pop();            int len = v[top].size();            if(len!=0){//判断是否是叶子节点                 for(int i=0;i<len;i++){                    q.push(v[top][i]);                }            }            else{                if(min>level){//求最小的层次                     min = level;                }                ans[top]=level;            }        }       }    return min;}int main(int argc, char *argv[]) {    int n;    double p,r;    cin>>n>>p>>r;    for(int i=0;i<n;i++){        int k;        cin>>k;        for(int j=0;j<k;j++){                int id;                cin>>id;                v[i].push_back(id);        }    }    int min = BFS(0);//最小的层次     for(int i=0;i<n;i++){//求个数         if(ans[i]==min){            num++;        }    }    printf("%.4lf %d\n",pow((1+r/100),min)*p,num);    return 0;}
原创粉丝点击