【蓝桥杯-dfs】方程的解数(含dfs重要思路)

本文介绍了一种使用递归深度优先搜索的方法来求解多项式方程组的C++实现。通过递归地尝试不同的变量值,算法能够找到使所有方程成立的整数解。代码详细展示了如何利用幂运算、递归回溯等技术实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include <iostream>

#include <cmath>

#include <cstring>

using namespace std;

static int visited[200] = { 0 }, ans, n, M, p[200];

static double k[200];

double power(int x, int y)

{

    double val = 1.0;

    while (y--)

        val = val * x;

    return val;
}

void dfs(int m, double sum)

{

    int i, x;

    if (m > n || m == n && sum != 0)      //第一步:判断

        return;

    if (m == n && sum == 0)

    {

        ans++;

        return;
    }

    for (x = 1; x <= M; x++)           

    {

        sum += k[m] * power(x, p[m]);          //第二步:对当前节点的某一种可能性进行操作

        dfs(m + 1, sum);                       //第三步:针对该种可能性,作为既定基础,递归dfs

        sum -= k[m] * power(x, p[m]);          //第四步:放弃当前节点的这种可能性,通过循环,对当前节点的下一种可能性进行操作
    }
}

int main()

{

    int i, j;

    cin >> n >> M;

    for (i = 0; i < n; i++)

        cin >> k[i] >> p[i];

    memset(visited, 0, 200);

    dfs(0, 0);

    cout << ans;

    return 0;
}
大致思路就是代码的注释四部曲。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值