数据范围是真的水,才100,dfs很好过。
推荐这题当DFS板子题( 雾
如果你看了亿眼题,不难写出这玩意:
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int n,sx,sy,mp[N][N],v[N][N],go[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
int dfs(int x,int y){
v[x][y] = 1;
int ans = 0;
//核心部分省略一万字节.....
v[x][y] = 0
return ans;
}
int main(){
scanf("%d%d%d",&n,&sx,&sy);
for(int i = 1;i <= n;i++)
for(int j = 1;j <= n;j++) scanf("%d",&mp[i][j]);
printf("%d\n",dfs(sx,sy));
return 0;
}
接下来就是填空了。
不碰到0或边界不停就是while了。
go数组永远滴神
for(int i = 0;i < 4;i++){
int xx = x,yy = y,j = 0;
while(1){
j++;
xx += go[i][0];
yy += go[i][1];
if(v[xx][yy] || xx <= 0 || yy <= 0 || xx > n || yy > n) break;
if(mp[xx][yy]) continue;
if(j == 1) break;
ans = max(ans,dfs(xx,yy) + j);
break;
}
}
如果来到一个来过的点,break。
因为题目说:
当你要跳的点相邻时,break。
因为题目说:
代码不用给了吧,完结撒花。