样例没过

P1683 入门

@[shooting__star](/user/955954) dfs爆搜,你,值得拥有( ``` #include<bits/stdc++.h> using namespace std; int cnt; int h,w; int dx[4]={1,-1,0,0}; int dy[4]={0,0,1,-1}; char c; int a[1000][1000]; bool v[1000][1000]; void dfs(int x,int y) { if(x>h || x<1 || y>w || y<1 || v[x][y] || a[x][y]==0) return ; v[x][y]=1; cnt++; for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; dfs(nx,ny); } } int main(){ int x1,y1; cin>>w>>h; for(int i=1;i<=h;i++) for(int j=1;j<=w;j++) { cin>>c; if(c=='.') a[i][j]=1; else if(c=='@') {x1=i;y1=j;a[i][j]=1;} } dfs(x1,y1); cout<<cnt; return 0; } ```
by Min6700 @ 2023-12-15 22:35:52


@[Min6700](/user/1175064) 。。。。。。
by shooting__star @ 2023-12-15 22:37:22


@[shooting__star](/user/955954) ~~能过就刑()~~
by Min6700 @ 2023-12-15 22:47:36


@[Min6700](/user/1175064) 你6,你刑
by shooting__star @ 2023-12-15 22:48:40


过了 $n$ 天…… ```cpp #include<bits/stdc++.h> using namespace std; int w,h; char mp[25][25]; int maxx; int dx[4]={1,-1,0,0}; int dy[4]={0,0,1,-1}; int sx,sy; int vis[25][25]; void dfs(int x,int y,int step) { maxx=max(maxx,step); for(int i=0;i<4;i++) { int xx=x+dx[i]; int yy=y+dy[i]; if(xx>0&&yy>0&&xx<=w&&yy<=h&&mp[xx][yy]=='.'&&vis[xx][yy]==0) { vis[xx][yy]=1; dfs(xx,yy,step+1); vis[xx][yy]=0; } } } int main() { cin>>w>>h; for(int i=1;i<w;i++) { for(int j=1;j<h;j++) { cin>>mp[i][j]; if(mp[i][j]=='@') { sx=i; sy=j; } } } vis[sx][sy]=1; dfs(sx,sy,0); cout<<maxx; return 0; } ``` 得,样例还给我一个 $7$
by shooting__star @ 2024-02-28 21:29:30


谢谢你,让我多 AC 了一道水题。 你题目理解错了!这个题的意思是从 `@` 出发能到达多少个点,不是你最远能走多远。 所以为什么题解里的代码里有 `dfs` 也有 `bfs` 。
by Niubi114514 @ 2024-02-28 22:09:20


```cpp #include<bits/stdc++.h> using namespace std; int w,h; char mp[25][25]; int maxx; int dx[4]={1,-1,0,0}; int dy[4]={0,0,1,-1}; int sx,sy; int vis[25][25]; void dfs(int x,int y,int step) { maxx=max(maxx,step); for(int i=0;i<4;i++) { int xx=x+dx[i]; int yy=y+dy[i]; if(xx>0&&yy>0&&xx<=w&&yy<=h&&mp[xx][yy]=='.') { vis[xx][yy]=1; if(vis[xx][yy]==0) dfs(xx,yy,step+1); else dfs(xx,yy,step); vis[xx][yy]=0; } } } int main() { cin>>w>>h; for(int i=1;i<w;i++) { for(int j=1;j<h;j++) { cin>>mp[i][j]; if(mp[i][j]=='@') { sx=i; sy=j; } } } vis[sx][sy]=1; dfs(sx,sy,0); cout<<maxx; return 0; } ``` so?
by shooting__star @ 2024-02-28 22:42:46


|