排序查找解决办法

排序查找

题地址:http://poj.org/problem?id=1928

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct point
{
    int x;
    int y;
    int add;
};
bool cmp(point a,point b)
{
    if(a.add!=b.add)
        return a.add>b.add;
    else
        return a.y<b.y;
}
int main()
{
    struct point arr[440];
    int row,column,T_time;
    while(scanf("%d%d%d",&row,&column,&T_time)!=EOF)
    {
        int i,x=1,y=1,sum=0;
        for(i=1;i<=row*column;i++)
        {
            scanf("%d",&arr[i].add);
            arr[i].x=x;
            if(y%column!=0)
                arr[i].y=y%column;
            else
                arr[i].y=column;
            y++;
            sum++;
            if(sum%column==0)
                x++;
        }
        sort(arr+1,arr+1+row*column,cmp);
        int T=2,T1,sum1=0;
        for(i=1;i<=row*column;i++)
        {
            sum1=sum1+arr[i].add;
            if(i==1)
                T1=arr[i].y-1+1+arr[i].y-1;
            else
                T1=abs(arr[i].y-arr[i-1].y)+abs(arr[i].x-arr[i-1].x)+1+arr[i].y-1;
            T=T+T1;
            if(T>T_time)
            {
                printf("%d\n",sum1-arr[i].add);
                break;
            }
            else
                T=T-arr[i].y+1;
        }
    }
    return 0;
}
这个是我的题的代码,希望各位帮忙看一下哪里出了错误。
我几组数据都是可以过的,但是提交是WA或者RuntimeError。。
在这里先谢过了。

------解决思路----------------------
RuntimeError一般都是数组越界或者死循环。检查代码吧point arr[440];这里数组是不是太小了。动态分配吧
------解决思路----------------------
你的row和column都是用户输入的,但没有看到你去检查它们的大小。
如果row*column>439,那么sort时就越界了;如果row*column>440,那么前面初始化数据的循环也越界了。