zoukankan      html  css  js  c++  java
  • 南阳oj题目20吝啬的国度 菜鸟的进阶之路

    吝啬的国度

    时间限制:1000 ms | 内存限制:65535 KB
    难度:3

    描述
    在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。

    输入
    第一行输入一个整数M表示测试数据共有M(1<=M<=5)组
    每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000),N表示城市的总个数,S表示参观者所在城市的编号
    随后的N-1行,每行有两个正整数a,b(1<=a,b<=N),表示第a号城市和第b号城市之间有一条路连通。
    输出出a号城市和第b号城市之间有一条路连通。
    输出
    每组测试数据输N个正整数,其中,第i个数表示从S走到i号城市,必须要经过的上一个城市的编号。(其中i=S时,请输出-1)
    样例输入
    1
    10 1
    1 9
    1 8
    8 10
    10 3
    8 6
    1 2
    10 4
    9 5
    3 7
    样例输出
    -1 1 10 10 9 8 3 1 1 8
    菜鸟的进阶之路,英语差的我选择了一种奇葩的方式学习英语,就是在写代码的时候能用英语单词就用绝不用字符代替。
    这道题找一条能从a号城市通往b号城市的路。首先我们需要把所有的城市之间的路都保存下来,不仅保留a—>b,还应保留b->a。接下来就是深搜了,直到搜到能通的路,用数组保存,打印输出。
    深搜时要注意。凡是搜索过的点,不比在作为起点,进行递归搜索,提高递归效率,否则就是死循环。

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    vector<int>connected[100005];//保存通道
    int state[100005];//记录点的状态,入上一个城市的编号
    void dfs(int serialnumber)//以第一个城市为起点递归,依次递归
    {
        for(int i=0;i<connected[serialnumber].size();i++)//将与该城市连通的城市都要遍历一遍
        {
            if(state[connected[serialnumber][i]]!=0)//判断是否遍历过这个城市
                continue;
            state[connected[serialnumber][i]]=serialnumber;//这个城市编号作为上一个城市录入数字
            dfs(connected[serialnumber][i]);
        }
    }
    int main()
    {
        int group;
        scanf("%d",&group);
        while(group--)
        {
            int citynumber,serialnumber,number1,number2;
            memset(state,0,sizeof(state));
            memset(connected,0,sizeof(connected));
            scanf("%d%d",&citynumber,&serialnumber);
            state[serialnumber]=-1;
            for(int i=0;i<citynumber-1;i++)
            {
                scanf("%d%d",&number1,&number2);
                connected[number1].push_back(number2);
                connected[number2].push_back(number1);
            }
            dfs(serialnumber);
            for(int i=1;i<=citynumber;i++)
                printf("%d ",state[i]);
            printf("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    Python之控制台进度条实现
    Flask之接入自定义的图片验证码
    CISSP学习笔记——域1安全与风险管理
    Nginx+Keepalived实现四层及七层负载均衡
    【葵花宝典】kolla部署OpenStack-AllinOne
    【葵花宝典】All-in-One模式安装KubeSphere
    【易筋经】Llinux服务器初始化及常用命令大全
    python去除文件中重复的行
    PowerDesigner批量增加字段
    Docker使用
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7900167.html
Copyright © 2011-2022 走看看