双向搜索(UVA 208 Firetruck)

ChatGPT设置密钥后Codex免手机验证:配置顺序与身份凭证复用机制 API Key 是一种用于身份识别的凭证,其核心原理是通过预配置的密钥替代交互式登录流程。在开发工具中,密钥认证优先级通常高于会话认证,当本地存在有效密钥时,工具会直接复用该凭证,从而减少重复验证环节。这种机制的技术价值在于提升开发效率与配置一致性,尤其适用于多设备切换、CI/CD 流水线及编程辅助工具等场景。以 Codex 为例,在 ChatGPT 界面提前配置 API 密钥后,Codex 启动时可读取持久化存储的密钥,避免触发手机号验证,实现身份凭证的跨入口复用。 阅读详情

UVA 208 Firetruck

Description:

The Center City re department collaborates with the transportation department to maintain maps of the city which re ects the current status of the city streets. On any given day, several streets are closed for repairs or construction. Fire ghters need to be able to select routes from the restations to res that do not use closed streets.
Central City is divided into non-overlapping re districts, each containing a single restation. When a re is reported, a central dispatcher alerts the restation of the district where the re is located and gives a list of possible routes from the restation to the re.

You must write a program that the central dispatcher can use to generate routes from the district restations to the res.

Input:

The city has a separate map for each re district. Streetcorners of each map are identi ed by positive integers less than 21, with the restation always on corner #1. The input le contains several test cases representing different res in different districts.

The rst line of a test case consists of a single integer which is the number of the streetcorner closest to the re.

he next several lines consist of pairs of positive integers separated by blanks which are the
adjacent streetcorners of open streets. (For example, if the pair 4 7 is on a line in the le, then
the street between streetcorners 4 and 7 is open. There are no other streetcorners between 4 and
7 on that section of the street.)

The nal line of each test case consists of a pair of 0’s.

Output

For each test case, your output must identify the case by number (
CASE 1:
',

CASE 2:
‘, etc). It must
list each route on a separate line, with the streetcorners written in the order in which they appear on
the route. And it must give the total number routes from restation to the re.
Include only routes
which do not pass through any streetcorner more than once.
(For obvious reasons, the re
department doesn’t want its trucks driving around in circles.)
Output from separate cases must appear on separate lines.

Sample Input

6
1 2
1 3
3 4
3 5
4 6
5 6
2 3
2 4
0 0
4
2 3
3 4
5 1
1 6
7 8
8 9
2 5
5 7
3 1
1 8
4 6
6 9
0 0

Sample Output

CASE 1:
1 2 3 4 6
1 2 3 5 6
1 2 4 3 5 6
1 2 4 6
1 3 2 4 6
1 3 4 6
1 3 5 6
There are 7 routes from the firestation to streetcorner 6.
CASE 2:
1 3 2 5 7 8 9 6 4
1 3 4
1 5 2 3 4
1 5 7 8 9 6 4
1 6 4
1 6 9 8 7 5 2 3 4
1 8 7 5 2 3 4
1 8 9 6 4
There are 8 routes from the firestation to streetcorner 4.

题意:
就是起点每次都是1,然后输入终点。输入路的端点,并且是无向图。然后找到所有从1到终点的路径。

思路:

  • 其实这个题做了好多遍都没过,一开始读题知道是要找所有的路径,所以用深搜,用二维vector模拟邻接表。用path[maxn]记录路径,depth记录深度,每次找到路径后,就输出。但是超时。

  • 再一想,找到所有路径不就是应该用深搜吗?哦对,应该还要剪枝。那这个题应该如何剪枝?一开始想的是用两个集合canR和notR分别表示能到和不能到的点,当有一条路径确定的时候,就把这条路上的所有点都insert,当走这个点走不到终点时,并且这个点不在canR中的时候,insert到notR。然后每次进入一个点前先要判断是notR有没有,有就不访问了。可是wa了。

  • 为啥wa?哦,因为当有一个点走不到终点时,可能下一次能到终点。比如有一个点i可以到终点,但是到这个点之前我们是先搜索完了这个点的周围的所有点,就导致这个点出不去了(dfs的判重啊)。所以可以到终点的点,却被我们拉近了黑名单(notR)。

  • 然后想,是不是优化的太过了?那这样优化实现不了,就退一步。只看你这个点是不是与终点在一个连通子图内就好了。不在一个连通子图内肯定到不了终点。所以先逆向搜索,从终点出发bfs,这样就可以遍历终点所在的连通子图,标记一下,然后dfs的时候就判断就好了。

AC代码

    #include<iostream>
    #include<cstdio>
    #include<vector> 
    #include<algorithm>
    #include<cstring>
    #include<set>
    #include<queue>
    using namespace std;

    int endNum;               //表示起点和终点的标号 
    vector<vector<int > > mapV(25);   //map 表示rode 
    int path[25];             //路径 
    int visit[25];            //标记数组 是否访问过
    int isLink[25];           //用于判断这些点是否与终点连通 
    int nodeNum;              //路的条数 
    int depth;                //路的长度 

    void dfs(int x)
    {
        //边界条件
        if(x == endNum) 
        {
            nodeNum++;  
            for(int i = 0;i < depth ; i++)
            {   
                if(path[i] == endNum)
                {
                    printf("%d\n",endNum);
                    break;
                }

                else 
                {
                    printf("%d ",path[i]);
                }

                //到达这里说明此路上的点可以到达
            }

            return ; 
        }

        //找其他路
        int n = mapV[x].size();
        for(int j = 0 ; j < n ;j++)
        {
            //未访问过  并且是可以达到的 
            if(visit[mapV[x][j]] == 0 && isLink[mapV[x][j]] == 1)  
            {
                visit[mapV[x][j]] = 1; 
                path[depth] = mapV[x][j];
                depth++;
                dfs(mapV[x][j]);                    
                depth--;
                visit[mapV[x][j]] = 0;
            }
        }
    }

    //用于把与终点联通的点标记 避免搜索与终点不连通的点 
    void bfs(int x)
    {
        queue<int > q;
        //初始结点入队
        q.push(x);

        while(!q.empty())
        {
            int temp =  q.front();
            q.pop();

            isLink[temp] = 1;

            //所有关联的节点入队 
            int n = mapV[temp].size();
            for(int j = 0;j < n; j ++)
            {
                if(visit[mapV[temp][j]] == 0)
                {
                    visit[mapV[temp][j]] = 1;
                    q.push(mapV[temp][j]);
                }

            }
        }   
    } 

    int main()
    {
        int caseN = 1;
        while(scanf("%d",&endNum) != EOF)
        {       
            for(int i=0;i<25;i++)
            {
                mapV[i].clear(); 
            }
            memset(visit,0,sizeof(visit));
            memset(path,0,sizeof(path));
            memset(isLink,0,sizeof(isLink)); 

            int s,e;           //一条路的起点和终点 
            while(scanf("%d %d",&s,&e) && !(s==0 && e==0))
            {
                mapV[s].push_back(e);
                mapV[e].push_back(s);
            }

            for(int i = 0;i < 25; i++)
                sort(mapV[i].begin(),mapV[i].end());

            nodeNum = 0;      //路的条数 
            depth=1;          //一条路的长度 
            path[0] = 1;
            visit[1] = 1;
            printf("CASE %d:\n",caseN);

            //在搜索前先优化,也就是说不搜索与终点不联通的点
            bfs(endNum); 
            memset(visit,0,sizeof(visit));

            dfs(1); 
            printf("There are %d routes from the firestation to streetcorner %d.\n",nodeNum,endNum);
            caseN ++;
        }

        return 0;
    }
基于云盾构建等保三级Web安全体系:从合规要求到实战落地 网络安全等级保护(等保)是保障信息系统安全的重要制度,其核心原理是通过分级防护、动态调整的策略,构建纵深防御体系。在技术层面,等保要求覆盖物理环境、通信网络、区域边界、计算环境和安全管理中心等多个层面,旨在通过技术和管理相结合的方式,有效应对网络攻击和数据泄露风险。对于Web应用而言,满足等保三级要求具有极高的技术价值,它不仅是合规的刚性需求,更是提升业务系统整体安全水位、建立用户信任、保障业务连续性的关键工程实践。在云计算时代,利用云原生安全服务(如Web应用防火墙WAF、云安全中心、态势感知等)可以高效 阅读详情

相关推荐

医学图像处理(一)使用U-Net进行MRI的肝脏分割

医学图像处理(一)使用U-Net进行MRI的肝脏分割数据集搜集训练集和测试集划分问题一: 测试集不包括GroundTruth问题二:T1和T2的数据能一起训练吗?问题三: T1的图像在文件夹中分成了InPhase和OutPhase,这个有什么区别?分离出肝脏将dicom文件转换为png格式数据增强U-net网络搭建自定义DatasetMain.py实验结果总结 图像分割小白一枚,之前接到一个MRI图像肝脏分割的任务。对于医学图像分割,第一想到的就是Unet. Unet在2015的MICCAI上首次提出,在医

qq_34003876的博客 2万+

Uva208救火车(回溯)(T)

题目: The Center City fire department collaborates with the transportation department to maintain maps of the city which reflects the current status of the city streets. On any given day(任何一天), several...

越开源越幸运 1万+

AWS RDS 介绍 三)创建 RDS 实例

AWS RDS 介绍 共分为 7 个部分, 其中 第 3部分重点介绍,如何创建一个RDS 实例。 三) AWS RDS 试用MySQL http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.

XuYongshi02的专栏 7645

UVa 208 Firetruck 消防车

The Center City fire department collaborates with the transportation department to maintain mapsof the city which reflects the current status of the city streets.     On any given day, several street

J1nAB1n9的博客 670

CTF-Web学习笔记:服务端请求伪造(SSRF)篇

本文系统介绍了CTF比赛中SSRF漏洞的攻防技术。首先解析了SSRF的核心原理,即利用服务器对用户输入URL的未校验缺陷,诱导其访问内网资源。然后详细分析了5类常见CTF题型:文件读取、内网探测、云服务元数据窃取、协议绕过及组合漏洞利用。重点讲解了绕过URL过滤、利用特殊协议(如dict://、gopher://)等实战技巧,并通过一道SSRF+Redis的高阶题目演示完整攻击链。最后给出防御建议:严格校验输入URL、禁用危险协议、实施内网隔离等。

Deng7326的博客 1688

Imatest-Dot Pattern

本文介绍了DotPattern模块测试方法,用于评估相机拍摄点阵图的表现。测试主要关注两点:色彩准确性(是否存在彩色噪点和杂边)和摩尔纹现象。测试步骤包括导入图片、选择分析区域、微调ROI、选择点状图类型和分析保存结果。测试结果包含横向色差、光学畸变和SMIATV畸变等数据,其中0.115%的色差值和0.004度的网格旋转角度表明相机表现良好,但-10.4%的SMIATV畸变显示存在明显桶形畸变。文章还提供了各项指标的具体解读标准。

weixin_64706696的博客 1350

A.Firetruck

Description The Center City fire department collaborates with the transportation department to maintain maps of the city which reflects the current status of the city streets. On any given day, several streets are closed for repairs or construction. Firef

qq_42321013的博客 355

STM32F103C8T6 + GY-906红外测温:手把手教你用CubeMX和HAL库搞定IIC驱动(附完整工程)

本文详细介绍了如何使用STM32F103C8T6和GY-906红外测温传感器(基于MLX90614芯片)实现非接触式温度测量。从STM32CubeMX工程创建、HAL库驱动适配到温度数据采集与处理,提供完整的开发流程和常见问题解决方案,帮助开发者快速掌握红外测温技术。

weixin_29188043的博客 253

UVA - 208 Firetruck (双向DFS)

        The Center City fire department collaborates with the transportation department to maintain mapsof the city which reflects the current status of the city streets. On any given day, several str...

Amove 371

Unity集成阿里云语音AI:从麦克风录音到实时语音合成的全流程实现

本文详细介绍了在Unity中集成阿里云语音AI服务,实现从麦克风录音到实时语音合成的完整流程。通过调用阿里云的语音转文字和文字转语音接口,开发者可以快速为游戏或应用添加语音交互功能,提升用户体验。文章涵盖了环境配置、签名认证、音频处理及项目集成等核心步骤,并提供了实用的调试技巧。

weixin_29224589的博客 323

2025年人形机器人产业研究

人形机器人是一种模仿人类外形、动作和行为的机器人,旨在替代或辅助人类完成各种任务。其显著特征包括人类外形、动作模仿和智能交互能力。根据形态和功能,人形机器人可分为小型、中型、大型以及服务型、工业型、救援型和娱乐型等类别。发展历程经历了初始阶段、高度集成系统阶段和突破性进展阶段,技术不断进步。关键技术包括执行系统、控制系统和感知与交互系统,涉及机械结构、运动控制、平衡控制、任务执行控制以及感知与交互能力。主要研究方向包括外部仿人化和内部仿生,前者关注外观设计、动作控制和任务执行能力,后者致力于模拟人类核心机制

一名80后IT人的成长记录,记录自己在工作、学习中的点点滴滴,在成长的喜悦与忧心的故事里,铭记反脆弱的勇气。 1567

[回溯&&剪枝]Firetruck UVA208

一道典型的搜索回溯题目,首先有21个结点,直接回溯搜索肯定超时,我一开始就是直接回溯,TLE,然后必须剪枝,我想到了用并查集,在目的地连通的子图中回溯查找,不连通的话可以直接忽略。

九问的烦恼 1232

从0到1打造工业级上位机:通信协议到架构设计的实战全流程

作为一名在工控领域摸爬滚打十余年的开发者,前阵子刚帮一家新能源工厂完成了一套工业上位机系统的从0到1搭建。从最初和PLC通信联调时的“连不上、传错数”,到最终系统7×24小时稳定运行,踩过的坑、攒下的实战经验,今天就毫无保留地拆解给各位同行。这篇文章会从通信层、数据层、UI层到架构层逐层深入,全是工业现场验证过的干货,新手也能跟着落地。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 661

UVa 208 - Firetruck,双向搜索进行剪枝

208 - Firetruck 6675 16.87% 1534 54.76% 题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=144

D_Double's Journey 1570

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[UVA 208] Firetruck (双向搜索)

Firetruck 题目链接: http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=17347 题目大意: 消防车从起点1出发,到终点n。问有多少条路径(每个结点只能通过一次),将路径按照字典序输出。 首先是一副无向图,结点数最大为21。 如以下样例: 6 1 2 1 3 3 4 3 5 4 6 5 6 2 3 2 4 0 0 表示

SIOFive的专栏 1128

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

uva208 -Firetruck (双向搜索进行剪枝)

题意: 给你一个图,1为起始节点,END为终止节点,让你打印起始到终点的所有路径。 思路: 深搜+回溯,超时了,看到一种解释是这样的,不是所有的路都能到达终点,比如从南京到北京,地图上各种路,东西南北乱走一通是不行的。 解决方法即剪枝,从终点搜索确定出可到达终点的路线。 代码如下:#include <iostream> #include <cstdio> #include <cstring

不要皱眉 440

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Firetruck UVA - 208 双向DFS

回溯搜索题 不能裸搜,因为有终点和起点不连通的情况  可以从终点DFS一次找出联通标记出后再用DFS回溯出来  也可以用并查集( 但是写并查集好累啊!) 还有输出格式有点坑,1前面是没空格的 #include&lt;bits/stdc++.h&gt; using namespace std; int n; vector&lt;int&gt;a1[300]; int vis[25]; int l...

Bug___Maker的博客 387

UVa 208 - Firetruck <双向DFS>

这题后台数据一定很坑,估计是那种从节点1可以扩展到节点2~19,但是就是无法与节点20连通的那种,才导致了刚开始没有逆向搜索的时候TLE到3000MS。 逆向DFS找到所有与终点相连的节点保存下来,速度很快的。这样正向搜索时就要把与终点不相连的节点剪枝。 判断连通性的方法有很多,其实本题还可以用BFS或者并查集防止超时。 #include #include #include #incl

爆米 600

UVA 208 Firetruck DFS 并查集

明明是放在暴力这一栏下面了,想碎觉之前写一道题目,但是暴力超时了。。把邻接矩阵改成邻接表还是超时了。。。。OTZ,没办法睡觉了。 好吧,其实我觉得已经没办法优化了。后来去看了题解,发现要先用并查集判断可行性,然后在跑DFS。 有一些问题在看完AC代码之后再讨论,还有就是。。样例输出骗了我几发PE. #include #include #include #include using

Sion 511

UVa 208 - Firetruck (回溯)

题意 给出一个无向图和终点的编号 按字典序枚举出从1到终点的路径 思路 要事先判断结点1是否可以到达结点k, 用一个bool judge()函数判断一下从终点能否回到1点即可. 如果无解直接输出有0种走法 有解则用dfs即可. 因为每种走法里一个编号只能走一次, 用一个数组m[]标记是否走过. 记得每次标记之后进入dfs(),...

a7152326的博客 124

(判连通+暴力)UVA - 208 Firetruck

原题链接: 比较麻烦,就不挂,可以上uva live找,也可以用virtual judge挂题。 题意: 输出从1到k的所有路径,不能重复经过 分析: 这题就是简单的深搜回溯,用一个数组记录路径,满足条件时输出。紫书上说需要先判断1到k是否联通,不然会超时。交了一发直接深搜,果然TLE。所以需要先判连通。 判连通的方法有(能想到的): 1、dfs和bfs,两者感觉差...

dijieluan7764的博客 182

uva208 - Firetruck

Firetruck The Center City fire department collaborates with the transportation department to maintain maps of the city which reflects the current status of the city streets. On any given day, se...

weixin_33743703的博客 123

Firetruck(dfs)

题目来源:1991 ACM Final,Problem A,Firetruck(UVa 208) 题意:给定目标街口,问从街口1到目标街口路径条数并打印出路径。(最多20个街口) 思路:本题是典型的路径搜索问题,搜索从位置1开始。依次将搜索到的街口编号放入路径path中。如果搜索到目标街口,那么本次搜索结束,并输出该路径,可达路径数增加1。如果没有到达目标街口,那么判断当前可到达的街口

H煊的博客 355

UVa OJ 题解索引

寂静山林 740

Uva208 Firetruck【dfs】【习题7-1】

最基本dfs回溯。。。

GuoZLH的博客 762
上一篇: 天津大学OJ_2017_07_12比赛I题L-The math problem
下一篇: 对抗女巫的魔法碎片(贪心,排序)
WaveBridge
博客等级 码龄10年 8粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值