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 |
Re:嘿嘿,第一次Accepted,本人的第一道题啊!!高手们看看能不能再优化(附代码)In Reply To:Re:嘿嘿,第一次Accepted,本人的第一道题啊!!高手们看看能不能再优化(附代码) Posted by:leevickwan at 2007-03-04 13:41:21 这是我参看别人写的 你看看吧 #include<stdio.h> #include<iostream> using namespace std; int point[101][101]; int values[101][101]; bool flag[101][101]; int direction[4][2]={{0,-1},{0,1},{-1,0},{1,0}}; int R,C; int find(int x,int y) { int i,temp,max=1; if(x>=R || y>=C || x<0 || y<0) return 0; if(flag[x][y]) // if(values[x][y]!=0) return values[x][y]; for(i=0;i<4;i++) { if(point[x][y]>point[x+direction[i][0]][y+direction[i][1]]) { temp=find(x+direction[i][0],y+direction[i][1]); if(max<temp+1) max=temp+1; } } flag[x][y]=true; values[x][y]=max; return max; } int main() { int i,j; int max=1,temp; scanf("%d %d",&R,&C); for(i=0;i<R;i++) { for(j=0;j<C;j++) { scanf("%d",&point[i][j]); flag[i][j]=false; } } for(i=0;i<R;i++) { for(j=0;j<C;j++) { temp=find(i,j); if(max<temp) max=temp; } } printf("%d\n",max); for(i=0;i<R;i++) { for(j=0;j<C;j++) { cout<<values[i][j]<<endl; } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator