NYOJ 10 skiing 【搜索】

原题链接: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);
	}
}        



你可能感兴趣的:(c,struct)