在原位置重画

    int iHeightBlance;
    for (int j = 0; j < m_nCol - 1; ++j)
    {
        iHeightBlance = (m_pEle[j] - minHeight[j]);
        if (iHeightBlance > 0)
        {
                glBegin(GL_LINE_STRIP);
                // 需要绘制线,y从i * m_iRow + j到i * m_iRow + j - iHeightBlance,x、z不变
                for (int i = 0; i < m_nRow - 1; i++)
                {
                    x1 = 2.0f*(float)(j)/m_nCol-1.0f;
                    z1 = 2.0f*(float)(i)/m_nRow-1.0f;
                    y1 = (float)(m_pEle[i*m_nCol+j])/(float)MaxHeight;
                   
                    colorR = (x1 + 1) / 2.0f;
                    colorG=1.0f-colorR;
                    colorB=1.0f;
                    glColor3f(colorR,colorG,colorB);
                    // 低点
                    glVertex3f(x1,y1-(float)iHeightBlance/MaxHeight,z1); 
               }
                glEnd();
        }
    }

如果要求在输出每个被删除节点的值时,输出它在链表中的位置,可以在链表节点结构体中再添加一个属性pos表示该节点在链表中的位置。在每次删除节点时,将其从链表中删除前,先记录下该节点在链表中的位置,然后再删除。在输出每个被删除节点的值时,输出其在链表中的位置即可。 以下是修改后的C++代码: ```c++ #include <iostream> using namespace std; // 定义单向循环链表结点结构体 struct ListNode { int val; int pos; ListNode* next; ListNode(int x, int p) : val(x), pos(p), next(nullptr) {} }; // 约瑟夫问题求解函数 void josephu(int n, int m) { // 构造循环链表 ListNode* head = new ListNode(1, 1); ListNode* p = head; for (int i = 2; i <= n; i++) { p->next = new ListNode(i, i); p = p->next; } p->next = head; // 将链表尾部连接到头部,形成循环链表 // 模拟约瑟夫问题的求解过程 p = head; while (p->next != p) { // 当链表中只剩一个结点时停止 for (int i = 1; i < m; i++) { p = p->next; // 找到要删除的结点的前一个结点 } ListNode* del = p->next; // 要删除的结点 cout << del->pos << " "; // 输出被删除结点的位置 p->next = del->next; // 将要删除的结点从链表中删除 delete del; // 释放被删除结点的内存空间 } cout << p->pos << endl; // 输出最后剩下的结点的位置 delete p; // 释放最后剩下的结点的内存空间 } int main() { int n, m; cout << "请输入总人数n和报数m:"; cin >> n >> m; josephu(n, m); return 0; } ``` 在上述代码中,我们在链表节点结构体中添加了一个pos属性表示该节点在链表中的位置,然后在构造循环链表时,将每个节点的pos属性初始化为其在链表中的位置。在模拟约瑟夫问题的求解过程中,每次删除一个节点时,先输出该节点的pos属性,然后再将其从链表中删除。最后输出剩下节点的pos属性即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值