201403-2

醉了,得了30分的代码,我到底哪里错了,该怎么验证
找到错误原因了,首先题意没搞懂,其实他的序号是不变的,按初始输入顺序,位置是可变的。
然后删除链表一个链表的节点时,不要再加上delete了,因为我刚开始delete的是L,这是指针的地址,删了之后,p=L指向同一个内存空间,当然p也不再是L了,跟着L改变,因为两人指向的是同一个地址。最后改变顺序的每个节点的坐标值都会改变。delete是用不到的,以后也还是少用。因为确实不怎么安全。算法笔记说好像不用delete也不会错。占用的内存空间也不大。

#include <bits/stdc++.h>
using namespace std;
struct node
{
    int x1;
    int y1;
    int x2;
    int y2;
    node *next;
};
struct location
{
    int x;
    int y;
};
int main()
{
    int n,m,a,b,c,d,flag=0;
    location loc[10];
    cin>>n>>m;
    int i=0,j=n;
    node *p,*pre,*head,*L;
    head=new node;
    head->next=NULL;
    pre=head;
    for(i=0;i<n;i++)
    {
        p=new node;
        cin>>a>>b>>c>>d;
        p->x1=a;
        p->y1=b;
        p->x2=c;
        p->y2=d;
        p->next=pre->next;
        pre->next=p;
    }
    for(i=0;i<m;i++)
    {
        cin>>a>>b;
        loc[i].x=a;
        loc[i].y=b;
    }
    for(i=0;i<m;i++)
    {
        L=head->next;
        pre=head;
        j=n+1;
        flag=0;
        while(L!=NULL)
        {
            j--;
            if(loc[i].x>=L->x1&&loc[i].x<=L->x2&&loc[i].y>=L->y1&&loc[i].y<=L->y2)
            {
                cout<<j<<endl;
                flag=1;
                pre->next=L->next;
                p=L;
                delete(L);
                p->next=head->next;
                head->next=p;
                break;
            }
            else
           {
            pre=L;
            L=L->next;
           }
        }
        if(flag==0) cout<<"IGNORED"<<endl;
    }
    return 0;
}

我好像找到原因了。。。。。下面是改正后的

#include <bits/stdc++.h>
using namespace std;
struct node
{
    int x1;
    int y1;
    int x2;
    int y2;
    int num;
    node *next;
};
struct location
{
    int x;
    int y;
};
int main()
{
    int n,m,a,b,c,d,flag=0;
    location loc[10];
    cin>>n>>m;
    int i=0;
    node *p,*pre,*head,*L;
    head=new node;
    head->next=NULL;
    pre=head;
    for(i=0;i<n;i++)
    {
        p=new node;
        cin>>a>>b>>c>>d;
        p->x1=a;
        p->y1=b;
        p->x2=c;
        p->y2=d;
        p->num=i+1;
        p->next=pre->next;
        pre->next=p;
    }
    for(i=0;i<m;i++)
    {
        cin>>a>>b;
        loc[i].x=a;
        loc[i].y=b;
    }
    for(i=0;i<m;i++)
    {
        L=head->next;
        pre=head;
        flag=0;
        while(L!=NULL)
        {
            if(loc[i].x>=L->x1&&loc[i].x<=L->x2&&loc[i].y>=L->y1&&loc[i].y<=L->y2)
            {
                cout<<L->num<<endl;
                flag=1;
                pre->next=L->next;
                p=L;
                p->next=head->next;
                head->next=p;
                break;
            }
            else
           {
            pre=L;//pre是L的前一个结点
            L=L->next;
           }
        }
        if(flag==0) cout<<"IGNORED"<<endl;
    }
    return 0;
}

用c++的list,用法写的好难用

#include <bits/stdc++.h>
using namespace std;
struct node
{
int x1;
int y1;
int x2;
int y2;
int num;
};
struct location
{
int x;
int y;
};
int main()
{
int n,m,a,b,c,d,flag=0;
node p;
cin>>n>>m;
list<node> l;
location loc[10];
list<node>::iterator iter;
int i=0,j=n;
for(i=0;i<n;i++)
{
cin>>a>>b>>c>>d;
p.x1=a;
p.y1=b;
p.x2=c;
p.y2=d;
p.num=i+1;
l.push_front(p);
}
for(i=0;i<m;i++)
{
cin>>a>>b;
loc[i].x=a;
loc[i].y=b;
}
for(i=0;i<m;i++)
{

flag=0;
iter=l.begin();
while(iter!=l.end())
{

if(loc[i].x>=iter->x1&&loc[i].x<=iter->x2&&loc[i].y>=iter->y1&&loc[i].y<=iter->y2)
{
cout<<iter->num<<endl;
l.erase(iter);
l.push_front(*iter);
flag=1;
break;
}
else
{
iter++;
}
}
if(flag==0) cout<<"IGNORED"<<endl;
}
return 0;
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值