陈垚不是瓜皮 2024-03-24 21:23 采纳率: 100%
浏览 16
已结题

蓝桥杯飞机降落c++,输出错误求解答


#include<iostream>
#include<algorithm>
using namespace std;
int flag[10] = { 0 };
struct plane {
    int t, d, l;
}p[10];
int n;
int dfs(int v, int time) {
    if (n >= v)
        return 1;
    for (int i = 1; i < n; i++)
    {
        if (!flag)
            flag[i] = 1;
        if (p[i].t + p[i].d < time)
        {
            flag[i] = 0;
            return 0;
        }
        int t = max(time, p[i].t) + p[i].l;
        if (dfs(v + 1, t))
            return 1;
        flag[i] = 0;

    }return 0;
}
int main()
{
    int T;
    cin >> T;
    while (T--) {
        cin >> n;
        for (int i = 0; i < n; i++)
            cin >> p[i].t >> p[i].d >> p[i].l;

    
    if (dfs(0, 0))
        cout << "yes" << endl;
    else
        cout << "no" << endl;
}
    return 0;
}
  • 写回答

3条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-03-24 21:23
    关注

    陈垚不是瓜皮 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    在你提供的代码中,我发现了几个问题:

    1. 你在dfs函数中判断flag[i]的条件应该改为if (!flag[i]),而不是if (!flag)。
    2. 在for循环中,你应该从0开始遍历,而不是从1开始遍历。
    3. 在dfs函数中,如果递归到达终止条件时,应该返回1而不是返回0。
    4. 在dfs函数中,递归调用dfs时传入的第一个参数应该是v+1而不是0。

    修改后的代码如下所示:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int flag[10] = { 0 };
    struct plane {
        int t, d, l;
    }p[10];
    int n;
    
    int dfs(int v, int time) {
        if (n <= v) {
            return 1;
        }
        
        for (int i = 0; i < n; i++) {
            if (!flag[i]) {
                flag[i] = 1;
                if (p[i].t + p[i].d < time) {
                    flag[i] = 0;
                    return 0;
                }
                int t = max(time, p[i].t) + p[i].l;
                if (dfs(v + 1, t)) {
                    return 1;
                }
                flag[i] = 0;
            }
        }
        
        return 0;
    }
    
    int main() {
        int T;
        cin >> T;
        while (T--) {
            cin >> n;
            for (int i = 0; i < n; i++) {
                cin >> p[i].t >> p[i].d >> p[i].l;
            }
        
            if (dfs(0, 0)) {
                cout << "yes" << endl;
            }
            else {
                cout << "no" << endl;
            }
        }
        
        return 0;
    }
    

    解决方案:

    1. 修改dfs函数中判断flag[i]的条件为if (!flag[i])。
    2. 修改for循环中的遍历范围,从0开始遍历。
    3. 修改dfs函数中递归调用dfs的参数,将v+1传入递归调用。
    4. 在dfs函数中,当递归到达终止条件时,返回1,表示成功。

    注意:以上解决方案是基于对你提供代码的错误进行修正。如果仍然存在其他问题,或者具体需求有误,请提供更多信息以便我进行进一步的帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟