最少转机(无路径之和) 图的广度优先遍历

2023-11-02 19:10

本文主要是介绍最少转机(无路径之和) 图的广度优先遍历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
书上没有自己画好丑,无穷字符还打不出来

输入条件
5 7 1 5
1 2
1 3
2 3
2 4
3 4
3 5
4 5

代码

#include <stdio.h>
struct node{int x;  //城市编号int s;  //转机的次数 
};
int main()
{//需要队列struct node que[2501];int e[51][51]={0},book[51]={0};int head,tail;int i,j,n,m,start,end,flag=0,a,b,cur;scanf("%d%d%d%d",&n,&m,&start,&end);//初始化表格for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(i==j)e[i][j]=0;elsee[i][j]=999999;			}for(i=1;i<=m;i++){scanf("%d%d",&a,&b);e[a][b] = 1;e[b][a] = 1;}head=1;tail=1;que[tail].x = start; //队列第一个城市 que[tail].s = 0;tail++;book[start] = 1;  //表示访问过了 while(head<tail){cur = que[head].x;//遍历表格中cur对应行 for(i=1;i<=n;i++){//如果该结果不为无穷且没有访问过,放入队列中 if(e[cur][i]!=999999&&book[i]==0){   que[tail].x = i;que[tail].s = que[head].s+1;tail++;book[i]=1;  //进行标记 }if(que[tail-1].x==end){flag=1;break;}}if(flag)break;head++;} printf("最少进行%d次转机",que[tail-1].s); return 0;
} 

题意分析
本道题需要无向图,且无权,用一个表格来记录
依据队列来求出最少转机的次数,这道题用宽搜比较好

记录下我的错误点
1.if(e[cur][i]!=999999&&book[i]==0) 后面的book[i] 我写成了book[cur]
2.que[tail].s = que[head].s+1; 后面的que[head].s+1 写成que[tail].s+1

要将一个点扩展的下标和这个点的下标分清楚,并且分清队列中head与tail


还有在书籍中的估计印刷错误
在这里插入图片描述

   												 可以加群一起讨论交流:891507813

这篇关于最少转机(无路径之和) 图的广度优先遍历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/332678

相关文章

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

hdu1180(广搜+优先队列)

此题要求最少到达目标点T的最短时间,所以我选择了广度优先搜索,并且要用到优先队列。 另外此题注意点较多,比如说可以在某个点停留,我wa了好多两次,就是因为忽略了这一点,然后参考了大神的思想,然后经过反复修改才AC的 这是我的代码 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一

POJ2010 贪心优先队列

c头牛,需要选n头(奇数);学校总共有f的资金, 每头牛分数score和学费cost,问合法招生方案中,中间分数(即排名第(n+1)/2)最高的是多少。 n头牛按照先score后cost从小到大排序; 枚举中间score的牛,  预处理左边与右边的最小花费和。 预处理直接优先队列贪心 public class Main {public static voi

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR