关于代码顺序

P2731 [USACO3.3] 骑马修栅栏 Riding the Fences

jingkongwanglimiaoa @ 2020-08-20 13:44:34

这是一道欧拉板子题尽管是模板但本蒟蒻还是一如既往的迷惑呢

经过长时间地坚持看题解,我终于A了这道题

但本蒟蒻还是有个问题没搞明白,先贴两段代码

1.正确AC代码
void dfs(int x)//深搜 
{ 
    for (int i = 0;i <= maxn;i++)//maxn指最大数值的点
    if (e[x][i]) 
    {
        e[x][i]--;//删边 ,e数组表示两个点有几条边
        e[i][x]--;
        dfs(i);
    }
    q[++hd] = x;    //hd为队尾,x入队
}
2.不正常WA两个点代码
void dfs(int x)//深搜 
{ 
    q[++hd] = x;    //hd为队尾,x入队
    for (int i = 0;i <= maxn;i++)//maxn指最大数值的点
    if (e[x][i]) 
    {
        e[x][i]--;//删边 
        e[i][x]--;
        dfs(i);
    }
}

两个代码几乎一模一样,就改了一行代码的顺序,它就wa了两个点,输出那里我一个倒序一个正序是莫得问题的,真是个玄学错误

奇妙蒟蒻遇玄学错误


by jingkongwanglimiaoa @ 2020-08-20 13:45:29

由于位置原因我没有贴整段代码


by Nuisdete @ 2020-08-20 13:51:27

这个要回溯的时候存储


by Nuisdete @ 2020-08-20 13:52:22

网上应该能查找


by mot1ve @ 2020-08-20 13:52:53

欧拉回路是递归求解的问题吧,肯定是先dfs到尽头,向上递归的时候存储答案。你这样是相当于走到一个点就存一个点


by mot1ve @ 2020-08-20 13:53:53

我给你造组数据等一下


by jingkongwanglimiaoa @ 2020-08-20 13:55:11

wow谢谢各位神犇


by jingkongwanglimiaoa @ 2020-08-20 13:56:15

这题应该不用回溯吧,保证连通且有解[伦敦大雾


by mot1ve @ 2020-08-20 13:56:36

5 1 2 2 3 2 4 4 5 5 2

这组数据 你自己画一下看看,你错误的代码输出的就是错误答案,自己分析一下原因。


by jingkongwanglimiaoa @ 2020-08-20 13:56:48

蒻蒻第一次提交用了回溯后两个点TLE了


by jingkongwanglimiaoa @ 2020-08-20 13:57:22

@kuoluo03 wow谢谢


| 下一页