| 记录编号 | 
        519645 | 
        评测结果 | 
        AAAAAAAAAA | 
    
    
        | 题目名称 | 
        975.[福州培训2010] 01迷宫 | 
        最终得分 | 
        100 | 
            
    
    
        | 用户昵称 | 
         夜未央 | 
        是否通过 | 
        通过 | 
    
    
        | 代码语言 | 
        C++ | 
        运行时间 | 
        0.758 s  | 
    
    
        | 提交时间 | 
        2018-11-01 20:41:25 | 
        内存使用 | 
        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;
}