luogu1141:01迷宫:宽搜+统计

题目连接:该题是luogu试炼场的2-8:T3


题目大意:
1 给出一个0,1棋盘,要求向4个方向出发,只能落脚在值不同的点上:0->1; 1->0。
2 m次询问,问每个点能落脚的点有多少。


解题思路:
1 宽搜的元问题:类似细胞分裂;
2 对于每个未搜过的点进行一次宽搜,再对队列里的点进行批量赋值记录;
3 按要求输出即可。


上代码:
 

//luogu1141:01迷宫 
//宽搜+统计步数 
//每一个点作为st:宽搜到能落脚的点,
//结束后对队列进行批量赋值步数;
 
#include
#include

char s[1005];
int a[1005][1005],f[1005][1005];
int n,m,ns;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};

struct nod{int x,y;}l[1000005];
int tou,wei;

void bfs(int x,int y)//常规宽搜 
{
	tou=1,wei=2;
	f[x][y]=1;
	l[tou].x=x;
	l[tou].y=y;
	int su=1;
	
	while(tou=1&&nx<=n&&ny>=1&&ny<=n&&f[nx][ny]==-1)
			{
				if(a[nx][ny]!=a[tx][ty])
				{
					l[wei].x=nx;
					l[wei].y=ny;
					f[nx][ny]=1;
					wei++;su++;
				}
			}
		}
		tou++;
	}
	//搜完之后,对每个点进行最大值的记录 
	for(int i=1;i

 

你可能感兴趣的:(题解,luogu,大礼包,队列,luogu1141,01迷宫,宽搜)