UVA 208 划水记录2

题目:题目描述
中心城市消防部门与运输部门合作,维护反映城市街道现状的城市地图。消防员需要能够选择从火警站到火警的路线。
中心城市分为不重叠的消防区。当报告发生火灾时,中央调度员通知火灾发生地区最近的火警站,并列出可能路线。您必须编写一个程序,中央调度员可以使用该程序来生成从地区火警站到火灾的路线。

输入
消防区都用小于 21 的正整数来标识,而且火场始终位于第一个消防区。输入文件包含多个测试用例,代表不同火灾。

? 测试用例的第一行由一个整数组成,该整数是距离火灾最近的火警站。

? 接下来的几行由成对的正整数组成,这些成对的正整数是开放街道相邻的消防区。(例如,如果对 4 7 在一行上,则消防区 4 和消防区 7 之间的街道是开放的。没有其他消防区在 4 和 7 之间。)

? 每个测试用例的最后一行由一对 0 组成。

输出
对于每个测试用例,您的输出必须通过编号来标识用例("CASE 1:","CASE 2:"等)。它必须列出每条路线,并按照字典序从小到大输出。它必须提供从火警站到火灾地点的总路线。
不同用例的输出必须分开显示。

样例输入
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

样例输出
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.

之前写过一种算法 也是dfs,既然开博客记录重新写一个也无所谓。

#include <stdio.h>
int *SZZZ[100];
int  MGSL[100] = { 0 };
int YGDS[100] = { 0 };
int JLBS[6] = { 0 };
void dfs(int KSD,int CCDWZ)
{
    int MGDSL = 0;
    int XHBL = 0;
    MGDSL = MGSL[KSD];
    if (6 == KSD)
    {
        for (XHBL = 0; XHBL < CCDWZ; XHBL++)
            printf("%d ", JLBS[XHBL]);
        printf("6\n");
        return;
    }
    for (XHBL; XHBL < MGDSL; XHBL++)
    {
        if (0==YGDS[KSD])
        {
            YGDS[KSD] = 1;
            JLBS[CCDWZ] = KSD;
            dfs(SZZZ[KSD][XHBL],CCDWZ+1);
            YGDS[KSD] = 0;
        }
    }
}
int main()
{
    int DYG = 0;
    int DEG = 0;
    int J××× = 0;
    int XHBL = 0;
    //初始化指针
    for (XHBL = 0; XHBL < 100; XHBL++)
    {
        SZZZ[XHBL] = malloc(sizeof(int) * 100);
    }
    scanf_s("%d", &J×××);
    for (XHBL = 0; XHBL < J×××; XHBL++)
    {
        scanf_s("%d", &DYG);
        scanf_s("%d", &DEG);
        SZZZ[DYG][MGSL[DYG]++] = DEG;
        SZZZ[DEG][MGSL[DEG]++] = DYG;
    }
    dfs(1, 0);
    return 0;
}

我代码默认写进到终点是6 了 自己改下就行了

原文地址:http://blog.51cto.com/3458905/2314704

时间: 2024-11-10 12:29:05

UVA 208 划水记录2的相关文章

UVA 624 CD 记录路径DP

开一个数组p 若dp[i-1][j]<dp[i-1][j-a[i]]+a[i]时就记录下p[j]=a[i];表示此时放进一个轨道 递归输出p #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <malloc.h> #include <ctype.h> #include <math.h> #in

UVa 208 消防车(dfs+剪枝)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=144 题意:给出一个n个结点的无向图以及某个结点k,按照字典序从小到大顺序输出从1到结点k的所有路径. 思路:如果直接矩阵深搜的话是会超时的,所以我们可以从终点出发,将与终点相连的连通块保存起来,这样dfs深搜时可以剪枝掉一些到达不了的点.只要解决了这个,dfs就是小问题. 这道题还有点坑的

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

原题链接: 比较麻烦,就不挂,可以上uva live找,也可以用virtual judge挂题. 题意: 输出从1到k的所有路径,不能重复经过 分析: 这题就是简单的深搜回溯,用一个数组记录路径,满足条件时输出.紫书上说需要先判断1到k是否联通,不然会超时.交了一发直接深搜,果然TLE.所以需要先判连通. 判连通的方法有(能想到的): 1.dfs和bfs,两者感觉差不多,但是我选择的bfs 2.floyd,n^3的复杂度,但更加粗暴直接,也更好写 3.待添加 感悟: 不预先判连通3000ms超时

UVa 208 救火车

题意:先给出离出火地点最近的路口,然后给出一些之间通畅的路口.要求给出所有从1号路口到火灾事故点的不含回路的简单路径. 思路:方法很容易想到,dfs即可.但是简单的dfs会超时,3s+. 之后看别人用了并查集,去了解了下并查集的思想.这里可以通过并查集提前判断一个路口是否和火灾路口想通,如果不通,则直接剪枝了.别看仅这一个优化,最后AC时间0.022,性能提升还是很多的.因为你早早地剪去一个结点,由它延伸下去的很多种情况都一并剪枝了的.也可以分析下直接dfs的复杂度,粗略地估算解答树结点的个数:

【DP】UVA 624 CD 记录路径

开一个数组p 若dp[i-1][j]<dp[i-1][j-a[i]]+a[i]时就记录下p[j]=a[i];表示此时放进一个轨道 递归输出p #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <malloc.h> #include <ctype.h> #include <math.h> #in

LeetCode-62 划水记录 04

题目一看;感觉可以用回溯法 就是从(0.0)开始 走到下一步 再走下一步 走到尽头了 向右边走 到尽头了回去上一个格子 再从上一个格子换一个方向 走 因为只能走2个方向 如果一个格子2个方向都走完了 就又回到上一个通过这样的办法 可以列出所有路径 并且找到所有的路径数之和.回溯法递归实现:代码如下: //递归版 void uniquePaths2(int m, int n,int H,int L,int *res) { if (m == H && n == L) { (*res)++; r

Firetruck UVA - 208

DFS+并查集 如果只用DFS的话会超时,用并查集剪枝,和起点终点不联通的点就不用跑了 这题有好多人写了博客,但是我觉得我的代码写的比较通俗易懂所以就贴上来了,我觉得我写代码的目标就是让任何人都能看懂,越小白越好(其实是因为真小白吧-- #include<bits/stdc++.h> using namespace std; int E[30][30]; int diste; int mark[30]; int path[30]; int fin[30]; int ans; int root[

【UVa 208】Firetruck

The Center City ?re department collaborates with the transportation department to maintain mapsof the city which re?ects the current status of the city streets. On any given day, several streets areclosed for repairs or construction. Fire?ghters need

UVA 208 (DFS)

题意:找出1到T的所有路径: 坑点:一开始以为是到终点,读错了题意,没测试第二个样例,结果WA了4遍,坑大了: 1 #include <iostream> 2 #include <cmath> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <sstream> 7 #include <algorithm> 8 #define