原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=10
这个题刚开始一点思路也没有,知道又是让人蛋疼的搜索,就是不知道该怎么搜。。表示很无奈。。。最好在教室上晚自习时去问问大兵。。终于有点眉目了。。于是昨天晚自习不上了,回来ac这个题。。一直a到10点 ,还没a上。⊙﹏⊙。。今天上午继续ac,最后才发现有个地方 初始化时候 搞错了。导致结果一直不对。浪费了我这么多的时间。让我情何以堪。。。( ⊙ o ⊙ )。。
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int n,m;
int ok[110][110];
int i[]={0,0,1,-1},j[]={1,-1,0,0};
struct sb
{
int x,y;
int step;
};
int bfs(int x1,int y1)
{
int a,b,c,d;
queue<sb>q;
sb yi={x1,y1,1};
q.push(yi);
while(!q.empty())
{
yi=q.front();
q.pop();
for(a=0;a<4;a++)
{
c=yi.x+i[a];//就是这里。。。以后要认真一点呀。。
d=yi.y+j[a];
if(ok[c][d]>0&&ok[c][d]<ok[yi.x][yi.y])
{
sb yi1={c,d,yi.step+1};
q.push(yi1);
}
}
}
return yi.step;
}
int main()
{
int a,b,k,max,min;
scanf("%d",&k);
while(k--)
{
max=0;
scanf("%d%d",&n,&m);
memset(ok,-1,sizeof(ok));
for(a=1;a<=n;a++)
for(b=1;b<=m;b++)
scanf("%d",&ok[a][b]);
for(a=1;a<=n;a++)
for(b=1;b<=m;b++)
{
min=bfs(a,b);
if(max<min)
max=min;
}
printf("%d\n",max);
}
}