| ||||||||||
| 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<iostream>
using namespace std;
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
int data;
}ArcNode;
typedef struct VNode
{
int data;
int flag;
ArcNode *firstarc;
}VNode;
int i,j,r,c,a[100][100],w,k,nextstep[4][2]={0,1,0,-1,1,0,-1,0};
int nexti,nextj;
VNode L[10000];
ArcNode *p;
void DFS(VNode L[10000], int v, int &sum, int t)
{
ArcNode *p;
if(sum<t) sum=t;
for(p=L[v].firstarc; p ; p=p->nextarc)
{
w=p->adjvex;
if(L[w].flag)
DFS(L,w,sum,t+1);
}
}
int main()
{
cin>>r>>c;
for(i=0; i<r; i++)
for(j=0; j<c; j++)
{
cin>>a[i][j];
L[i*c+j].data = a[i][j];
L[i*c+j].flag=1;
L[i*c+j].firstarc=NULL;
}
for(i=0; i<r; i++)
for(j=0; j<c; j++)
for(k=0; k<4; k++)
{
nexti=nextstep[k][0]+i;
nextj=nextstep[k][1]+j;
if( nexti>=0 && nexti<r && nextj>=0 && nextj<c && a[nexti][nextj]>a[i][j] )
{
p=new ArcNode;
p->adjvex= nexti*c + nextj;
p->data = a[nexti][nextj];
p->nextarc=L[i*c+j].firstarc;
L[i*c+j].firstarc=p;
}
}
int max=0,count,t;
for(i=0; i<r*c-1; i++)
{
t=count=1;
if(L[i].flag)
DFS(L,i,count,t);
if(max<count) max=count;
}
cout<<max<<endl;
return 1;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator