记录编号 97549 评测结果 AAAAAAAAAA
题目名称 [福州培训2010] 01迷宫 最终得分 100
用户昵称 GravatarDijkstra 是否通过 通过
代码语言 C++ 运行时间 0.689 s
提交时间 2014-04-19 15:51:11 内存使用 5.08 MiB
显示代码纯文本
#include<fstream>
#include<queue>
using namespace std;
ifstream fin("maze01.in");
ofstream fout("maze01.out");
struct point{int x,y;};
int style[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int N,M,ans[1000][1000]={{0}},step;
bool map[1000][1000];
queue<point>rec;
queue<point>bfs;
void BFS(int x,int y)
{
	bfs.push((point){x,y});
	int X,Y,i;
	point p;
	ans[x][y]=1;
	step=1;
	while(!bfs.empty())
	{
		p=bfs.front();
		bfs.pop();
		for(i=0;i<4;i++)
		{
			X=p.x+style[i][0];
			Y=p.y+style[i][1];
			if(X<0||X==N||Y<0||Y==N) continue;
			if(map[p.x][p.y]+map[X][Y]!=1) continue;
			if(ans[X][Y]) continue;
			step++;
			bfs.push((point){X,Y});
			rec.push((point){X,Y});
			ans[X][Y]=1;
		}
	}
	while(!rec.empty())
	{
		p=rec.front();
		rec.pop();
		ans[p.x][p.y]=step;
	}
}
int main()
{
	int i,j;
	char ch;
	fin>>N>>M;
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
		{
			fin>>ch;
			map[i][j]=int(ch-'0');
		}
	for(i=0;i<N;i++)
		for(j=0;j<N;j++)
			if(!ans[i][j])
			{
				rec.push((point){i,j});
				BFS(i,j);
			}
	while(M--)
	{
		fin>>i>>j;
		fout<<ans[i-1][j-1]<<endl;
	}
	return 0;
}