题目链接 : poj2230

大致题意:

有一个人每晚要检查牛场,牛场内有m条路,他担心会有遗漏,就每条路检查两次,且每次的方向不同,要求你打印他行走的路径(必须从1开始),打印一条即可。

思路分析

输入n条边,要求每条边都要走两次,每次的方向不同。那么就可以看成是有向图,把一条边分成两条边,就可以直接打印结果。但是这题还有一个陷阱,m最大为50000,n最大为10000,如果直接采用邻接矩阵数组放不下,那么我的方法就是利用一个动态数组存储结构体

struct node
{
    int key;  //记录边的另一头的值
    int ok;  //标记这条路是否走过
    node(int x,int y);
};

vector<node>G[maxn]; //记录每条边的信息

这样做的优点在于,不可能每个节点都与其他节点连通,毕竟最多只有50000条边,即说明不可能每个G[i].size()都接近10000, 因此利用动态数组可以很好地节约内存。

强烈建议搞懂这里的动态数组的处理方法。

AC代码如下:

#include<cstdio>
#include<vector>
using namespace std;
const int maxn=10000+5;

struct node
{
    int key;
    int ok;
    node(int x,int y);
};

node::node(int x,int y)
{
    key=x; ok=y;
}

vector<node>G[maxn];

void dfs(int u)
{
    int len=G[u].size();
    for(int i=0;i<len;i++)
    {
        node &temp=G[u][i];
        if(temp.ok)
        {
            temp.ok=0;
            dfs(temp.key);
        }
    }
    printf("%d\n",u);
}

int main()
{
    int n,m;
    int x,y;
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        scanf("%d%d",&x,&y);
        G[x].push_back(node(y,1));
        G[y].push_back(node(x,1));
    }
    dfs(1);
    return 0;
}

如有不当之处欢迎指出!!

poj 2230详解的更多相关文章

  1. POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9897   Accepted: 41 ...

  2. 【并查集】模板 + 【HDU 1213、HDU 1232、POJ 2236、POJ 1703】例题详解

    不想看模板,想直接看题目的请戳下面目录: 目录: HDU 1213 How Many Tables[传送门] HDU 1232 畅通工程 [传送门] POJ 2236 Wireless Network ...

  3. POJ 1077 Eight (BFS+康托展开)详解

    本题知识点和基本代码来自<算法竞赛 入门到进阶>(作者:罗勇军 郭卫斌) 如有问题欢迎巨巨们提出 题意:八数码问题是在一个3*3的棋盘上放置编号为1~8的方块,其中有一块为控制,与空格相邻 ...

  4. 高斯消元法(Gauss Elimination)【超详解&模板】

    高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. ...

  5. MVC图片上传详解 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS C#中Enum用法小结 表达式目录树 “村长”教你测试用例 引用provinces.js的三级联动

    MVC图片上传详解   MVC图片上传--控制器方法 新建一个控制器命名为File,定义一个Img方法 [HttpPost]public ActionResult Img(HttpPostedFile ...

  6. 算法笔记--sg函数详解及其模板

    算法笔记 参考资料:https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html sg函数大神详解:http://blog.csdn.net/l ...

  7. (转载)--SG函数和SG定理【详解】

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念:        P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败.        N点:必胜点 ...

  8. 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)

    如约而至,Java 10 正式发布!   3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...

  9. (转)dp动态规划分类详解

    dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...

随机推荐

  1. pulltorefresh 设置刷新文字提示颜色

     xmlns:ptr="http://schemas.android.com/apk/res-auto" 赵泽民 2016/7/12 15:48:58 ptr:ptrHeaderS ...

  2. ecplise最有用的8个快捷键

    1. ctrl+shift+r 打开资源 这组快捷键可以让你打开你工作区中的任何一个文件.而你只需要按下键盘的文件名或前几个字母 美中不足的是这组快捷键并非在所有视图下都能用. 2.ctrl+o:快速 ...

  3. android 软键盘的使用

    AndroidManifest.xml文件中界面对应的<activity>里加入android:windowSoftInputMode="adjustPan"   键盘 ...

  4. 【转】<string> <string.h> <cstring>的区别

    #include < string.h > void main() { string aaa = " abcsd d " ; printf( " lookin ...

  5. 【转】Linux Oracle服务启动&停止脚本与开机自启动

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设置相关参数,首先先介 ...

  6. Java自学能学会吗?最新Java高级学习路线

    就好像一千个人心中有一千个哈利波特一样,这个答案不绝对也不唯一,Java好学但自学的确阻力有些大,作为一门技术语言,它所蕴含的智慧绝对不是靠几本XX入门,XX框架之类的书所能概括,自学Java你要做好 ...

  7. 一步一步从原理跟我学邮件收取及发送 9.多行结果与socket的阻塞

    前几篇的文章发表后,有网友留言说没有涉及到阻塞的问题吗?在 socket 的编程当中,这确实是个很重要的问题.结合目前我们文章的内容进度,我们来看看为什么说阻塞概念很重要. 接着上篇的内容,当我们发送 ...

  8. 同时装了Python3和Python2,使用pip

    第一种方法: pip安装: py -2 -m pip install -- py -3 -m pip install -- 运行代码: py -2 py.py py -2 py.py 第二种方法: 运 ...

  9. 浅探element-ui2组件源码之upload

    最近不小心更新了element-ui的版本,已经到了2.1.0,以前修改的源码都失效了. 于是重新尝试下面的指令重新修改: git clone https://github.com/ElemeFE/e ...

  10. [DeeplearningAI笔记]ML strategy_1_1正交化/单一数字评估指标

    机器学习策略 ML strategy 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.1 什么是ML策略 机器学习策略简介 情景模拟 假设你正在训练一个分类器,你的系统已经达到了90%准确 ...