暑假训练 欧拉回路

欧拉回路这个专题的入门也差不多了,总结下吧。

一般用可达矩阵来存储图,然后判断欧拉回路,首先判断出度和入度是否满足欧拉回路的要求(即入度等于出度,或欧拉通路仅有两点入度比出度大一,出度比入度大一)
代码:

int in[n];
bool judge()
{
    for(int i = 0; i < n; i++)
    {
        if(in[i] % 2 != 0)return false;
        }
        return true;
    }
}

或欧拉通路:

int in[n];
int out[n];
bool judge()
{
    int n = 0, m = 0;
    for(int i = 0; i < n; i++)
    {
        if(in[i] == out[i])continue;
        n++;
        if(n > 2)return false;
        if(in[i] - out[i] == 1)m = m + 1;
        else if(out[i] - in[i] == 1)m = m + 2;
    }
    if(m != 0 && m != 3)return false;
    else return true;
}

之后要用dfs判断是否所有点可达。。。
最后就是输出问题了,比如珠子那题就要先dfs后输出,而之后的john那题要最小序输出,试了下dfs函数中输出就会WA,应该就是输出次序错了吧,所以存到数组中在输出。
目前遇到的问题就这些吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值