| ||||||||||
| 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 | |||||||||
第一次写poj,用动态申请数组的,discuss里面找到的测试数据都通过了,但是依然Runtime Error,求大神指点代码贴上,能找到的测试数据都过了,却总是RE,伤脑筋。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int **space(int R, int C);
int next(int **M, int **f, int **L, int i, int j);
void modify(int **f, int i, int j);
int max(int **L, int R_, int C_);
int main()
{
int R,C;
cin>>R>>C;
int R_=R+2;
int C_=C+2;
int **Montain, **Line, **flag;
Montain=space(R_,C_);//申请数组空间
Line=space(R_,C_);
flag=space(R_,C_);
for(int i=0; i<R_; i++) //初始化数组
{
for(int j=0; j<C_; j++)
{
if (i!=0 && j!=0 && i!=R_-1 && j!=C_-1)
{
Line[i][j] = 1;
cin>>Montain[i][j];
}
else
{
Montain[i][j] = 0;
Line[i][j] = 0;
}
flag[i][j] = 0;
}
}
on:
for(int i=1; i<R_-1; i++)
{
for(int j=1; j<C_-1; j++)
{
int temp = next(Montain,flag,Line,i,j);
if(Line[i][j]!=temp)
{
Line[i][j]=temp;
goto on;
}
}
}
cout<<max(Line,R_,C_)<<endl;
free(Montain);
free(Line);
free(flag);
}
int next(int **M, int **f, int **L, int i, int j)
{
int maxl=L[i][j];
if(M[i][j]>M[i-1][j] && f[i][j]!=1 && maxl<=L[i-1][j])
{
maxl=L[i-1][j]+1;
f[i][j]=1;
modify(f,i,j);
}
if(M[i][j]>M[i+1][j] && f[i][j]!=2 && maxl<=L[i+1][j])
{
maxl=L[i+1][j]+1;
f[i][j]=2;
modify(f,i,j);
}
if(M[i][j]>M[i][j-1] && f[i][j]!=3 && maxl<=L[i][j-1])
{
maxl=L[i][j-1]+1;
f[i][j]=3;
modify(f,i,j);
}
if(M[i][j]>M[i][j+1] && f[i][j]!=4 && maxl<=L[i][j+1])
{
maxl=L[i][j+1]+1;
f[i][j]=4;
modify(f,i,j);
}
return maxl;
}
int **space(int R, int C)
{
int **M;
M=(int **)malloc(sizeof(int*)*R);
for(int i=0; i<C; i++)
{
M[i]=(int*)malloc(sizeof(int)*C);
}
return M;
}
void modify(int **f, int i, int j)
{
if(f[i-1][j]==2) f[i-1][j]=0;
if(f[i+1][j]==1) f[i+1][j]=0;
if(f[i][j-1]==4) f[i][j-1]=0;
if(f[i][j+1]==3) f[i][j+1]=0;
}
int max(int **L, int R_, int C_)
{
int maxl=L[0][0];
for(int i=1; i<R_-1; i++)
for(int j=1; j<C_-1; j++)
if(maxl<L[i][j]) maxl=L[i][j];
return maxl;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator