看一下题面就知道该用BFS去做,搜索可以看一下搜索基础
我们用BFS模板做更改,看看怎么改:
对于“可以移动到多少格”这个问题,可以定义结构体,加计数器;也可使用标记数组,循环计数。
对于“下一步必须与上一步01值不同”这个条件,可以与上面的一样,结构体加上一个记录上一次的变量,也可以使用其他方法。
记得多组输出换行(作者死因)
BFS的AC代码洛谷中比比皆是,贴一个DFS的吧
#include<bits/stdc++.h>
int n,m,cnt[100009],x,y,f[1009][1009];
char wor[1009][1009];
void dfs(int r,int c,int z,int po){
if (r<0 || r>=n || c<0 || c>=n || f[r][c]!=-1 || wor[r][c]-'0'!=z)return;
f[r][c]=po;cnt[po]++;
dfs(r-1,c,!z,po);
dfs(r+1,c,!z,po);
dfs(r,c-1,!z,po);
dfs(r,c+1,!z,po);
}
int main(){
scanf("%d%d",&n,&m);
for (int i=0;i<n;i++)
scanf("%s",wor[i]);
memset(f,-1,sizeof(f));
for (int i=0;i<m;i++){
scanf("%d%d",&x,&y);
x--;
y--;
if (f[x][y]==-1)dfs(x,y,wor[x][y]-'0',i);else cnt[i]=cnt[f[x][y]];
}
for (int i=0;i<m;i++) printf("%d\n",cnt[i]);
}
码风较乱,dalao勿喷~
弱弱说一句,给我点个赞吧,球球了!