讨论 / 滑雪 C语言循环解法
裂魂 2012-02-29 05:23:00
点我顶贴 收藏 删除
#include <stdio.h>

#include <stdlib.h>

#define maxn 101

int f[maxn][maxn],a[maxn][maxn],b[10002][3];

int max1(int a,int b)

{

if(a>b) return a;

else return b;

}

int sort(int n)

{

int i,j,temp;

int flag=0;

for(i=0;i<n-1;i++)

{

for(j=n-2;j>=i;j--)

if(b[j][0]>b[j+1][0])

{

temp=b[j][0];

b[j][0]=b[j+1][0];

b[j+1][0]=temp;

temp=b[j][1];

b[j][1]=b[j+1][1];

b[j+1][1]=temp;

temp=b[j][2];

b[j][2]=b[j+1][2];

b[j+1][2]=temp;

flag=1;

}

if(flag==0) break;

else flag=0;

}

}

int main()

{

int r,c;

int i,j,ans=0,temp,total=0;

scanf("%d %d",&r,&c);

for(i=0;i<r;i++)

for(j=0;j<c;j++)

{

scanf("%d",&a[i][j]);

b[total][0]=a[i][j];

b[total][1]=i;

b[total][2]=j;

total++;

f[i][j]=1;

}

sort(total);

// memset(f,0,sizeof(f));

for(i=total;i>=0;i--)

{

if(a[b[i][1]-1][b[i][2]]<a[b[i][1]][b[i][2]])

f[b[i][1]-1][b[i][2]]=max1(f[b[i][1]-1][b[i][2]],f[b[i][1]][b[i][2]]+1);

if(a[b[i][1]+1][b[i][2]]<a[b[i][1]][b[i][2]])

f[b[i][1]+1][b[i][2]]=max1(f[b[i][1]+1][b[i][2]],f[b[i][1]][b[i][2]]+1);

if(a[b[i][1]][b[i][2]-1]<a[b[i][1]][b[i][2]])

f[b[i][1]][b[i][2]-1]=max1(f[b[i][1]][b[i][2]-1],f[b[i][1]][b[i][2]]+1);

if(a[b[i][1]][b[i][2]+1]<a[b[i][1]][b[i][2]])

f[b[i][1]][b[i][2]+1]=max1(f[b[i][1]][b[i][2]+1],f[b[i][1]][b[i][2]]+1);

}

for(i=0;i<r;i++)

for(j=0;j<c;j++)

if(f[i][j]>ans) ans=f[i][j];

printf("%d\n",ans);

system("Pause");

return 0;

}

是否感觉这代码很魂淡

查看更多回复
提交回复