| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大牛们帮我看看我的程序有什么问题啊,我自己测试的都没问题#include <stdio.h>
#include <malloc.h>
#include <string.h>
int *h;
int *h2;
int *f;
int R,C;
#define max(a,b) (((a) > (b)) ? (a) : (b))
bool IsHaveSmaller(int i)
{
int nNum = (*(h+i))-1;
if (nNum <0)
return false;
//判断是否靠左
if (i % C != 0)
if ((nNum == *(h+i-1)) &&
*(f+i-1))
return true;
//判断是否靠右
if (i % C != C-1)
if ((nNum == *(h+i+1)) &&
*(f+i+1) > 1)
return true;
//判断是否靠上
if (i >= C)
if ((nNum == *(h+i-C)) &&
*(f+i-C))
return true;
//判断是否靠下
if (i < C*R-C)
if ((nNum == *(h+i+C)) &&
*(f+i+C) > 1)
return true;
return false;
}
int main()
{
scanf("%d %d",&R, &C);
int num = R * C;
int size = num * sizeof(int);
h = (int*)malloc(size);
h2 = (int*)malloc(size);
int *t = (int*)malloc(size);
f = (int*)malloc(size);
int *ph = h;
int i;
for(i=0;i < num;i++)
{
scanf("%d",ph+i);
*(f+i) = 2;
}
memcpy(t,h,size);
memcpy(h2,h,size);
bool isGet = false;
while(true)
{
isGet = false;
for (i= 0;i < num;i++)
{
if(*(f+i) != 2)
{
if (*(f+i) == 1)
*(f+i) = 0;
continue;
}
if(IsHaveSmaller(i))
{
*(h2+i) = *(h+i) -1;
isGet = true;
}
else
{
*(h2+i) = *(h+i);
*(f+i) = 1;
}
}
ph = h;
h = h2;
h2 = ph;
if (!isGet)
break;
}
int nRes = 0;
for (i= 0;i < num;i++)
{
int num1 = *(t+i);
int num2 = *(h2+i);
nRes = max((*(t+i)-*(h2+i)),nRes);
}
printf("%d",nRes+1);
return 1;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator