最少转机
来源:互联网 发布:java开发实战经典 目录 编辑:程序博客网 时间:2024/06/12 01:10
题意:小哼和小哈一起坐飞机旅游,他们现在位于1号城市,目标是5号城市,可是1号城市没有到5号城市直航,不过他们收集了很多航班信息,现在他们要找出转机次数最少的方案。。。。。
样例:
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之间可以相互到达。。。
思路:这是一个无向图,故用广度优先搜索。
代码:
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct bb
{
int x,y; //x为城市的编号,y为转机次数
}now,nex;
int main()
{
int e[60][60]={0},book[60]={0};
int n,m,a,b,sx,end;
scanf("%d%d%d%d",&n,&m,&sx,&end);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j) e[i][j]=0; //如果相等则为0
else e[i][j]=99999999; //否则赋为99999999
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
e[a][b]=1; //注意这里是无向图,双向的。。。。。
e[b][a]=1;
}
queue<bb>q; //初始化队列
now.x=sx;
book[sx]=1;
now.y=0;
q.push(now);
while(!q.empty())
{
now=q.front();
q.pop();
for(int j=1;j<=n;j++)
{
if(e[now.x][j]!=99999999&&book[j]==0) //从j到此时有航班且不在队列中,没被访问过,即为1
{
book[j]=1;
nex.x=j;
nex.y=now.y+1;
q.push(nex);
}
if(nex.x==end)
{
break;
}
}
}
printf("%d\n",nex.y);
}
- 最少转机
- 最少转机
- 最少转机问题
- 图:最少转机
- tianchai 最少转机 (邻接矩阵)
- 广度优先搜索-最少转机次数
- 图的宽度优先遍历--最少转机
- 最少转机--图的广度优先遍历
- 最少转机-图的广度优先遍历
- 最少转机-图的广度优先遍历
- 转机
- 转机
- 最少转机——图的广度优先遍历
- 蓝桥-图5-广度优先遍历-转机最少
- 5.2最少转机——图的广度优先遍历
- 第17周 啊哈算法 图的遍历算法-最少转机
- 转机常用软件
- 出现转机
- iOS 手势(下)
- 如何成为一个C++高级程序员
- solr 第二章
- leetcode:273. Integer to English Words
- 使用JS模拟Map容器
- 最少转机
- iOS(学习5) 布局
- [HTML5权威指南] => 读书笔记(一)
- 蓝桥杯--星系炸弹--算年月--Excel
- fancybox传递参数
- 蓝桥杯--三羊献瑞
- 04环信聊天界面 - 显示历史会话记录
- 【codevs1368】【BZOJ1034】泡泡堂BNB,贪心思路
- UVA 11134 Fabled Rooks