zoukankan      html  css  js  c++  java
  • (BFS遍历 邻接矩阵)最少转机

    题意:小哼和小哈一起坐飞机旅游,他们现在位于start号城市,目标是end号城市,可是start号城市没有到end号城市直航,

         不过他们收集了很多航班信息,现在他们要找出转机次数最少的方案。

    输入样例:

    5 7 1 5

    1 2

    1 3

    2 3

    2 4

    3 4

    3 5

    4 5

    第一行的5表示有5个城市(编号为1~5),7表示有7条航线,1表示起始城市,5表示目标城市,接下来的每行“a b”,表示a,b之间有航线,也就是a,b之间可以相互到达。

    输出样例:

    2

    #include <cstdio>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <sstream>
    #include <math.h>
    #include <queue>
    using namespace std;
    const int inf=0x7fffffff;
    const long long mod=1e9+7;
    const double PI=acos(-1);
    
    int n,m,start,end;
    int ans=9999999;
    bool vis[105];
    int e[105][105];
    
    struct node{
        int s;
        int d;
        node(int ss,int dd){
            s=ss;
            d=dd;
        }
    };
    
    void init(){                           //初始化邻接矩阵 
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(i==j) e[i][j]=0;
                else e[i][j]=99999999;
            }
        }
    } 
    
    int bfs(int pos){
        queue<node> q;
        vis[pos]=1;                                  //设置起点被遍历 
        q.push(node(pos,0));                         //放入队列起点 
        while(!q.empty()){
            node now=q.front();                      //now为此时遍历的点 
            q.pop();
            for(int i=1;i<=n;i++){                   //找可以和 now 连通的点  
                if(e[now.s][i]!=99999999&&!vis[i]){  //和 now 连通则标记 并加入队列 
                    q.push(node(i,now.d+1));
                    vis[i]=1;
                }
                if(now.s==end){                      //找到终点直接退出 
                    return q.back().d;
                }
            }
        }
        return -1;
    }
    int main()
    {
        int x,y;
        cin>>n>>m>>start>>end;
        init();
        for(int i=0;i<m;i++){                      //输入边 
            cin>>x>>y;
            e[x][y]=1;
            e[y][x]=1;
        }
        cout<<bfs(start);
        return 0;
    }
  • 相关阅读:
    SQL CREATE TABLE 语句
    SQL CREATE DATABASE 语句
    SQL INSERT INTO SELECT 语句
    SQL SELECT INTO 语句
    Why is chkconfig no longer available in Ubuntu?
    drag-html
    js利用offsetWidth和clientWidth来计算滚动条的宽度
    procomm plus
    很多shell命令后面的单横杠和双横杠,原来这个意思
    angular md-toast 颜色
  • 原文地址:https://www.cnblogs.com/xusi/p/12582295.html
Copyright © 2011-2022 走看看