DFS(深度优先搜索)洛谷P1162
看大佬们dfs一遍就出结果,蒟蒻的我dfs了三遍,当然这题也可以用bfs做,但是dfs不用队列代码短一些。
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int N = 40; int mp[N][N],st[N][N]; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; int n; void dfs1(int xx,int yy) { for(int i=0;i<4;i++) { int x=xx+dx[i],y=yy+dy[i]; if(!st[x][y]&&mp[x][y]==1&&x<n&&y<n&&x>=0&&y>=0) {st[x][y]=1;dfs1(x,y);} } } void dfs2(int xx,int yy) { for(int i=0;i<4;i++) { int x=xx+dx[i],y=yy+dy[i]; if(!st[x][y]&&x<n&&y<n&&x>=0&&y>=0&&mp[x][y]==0) {st[x][y]=1;dfs2(x,y);} } } int main(int argc, const char * argv[]) { cin>>n; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>mp[i][j]; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(!st[i][j]&&mp[i][j]==1) dfs1(i,j); } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(!st[i][j]&&mp[i][j]==0&&(i==0||j==0||i==n-1||j==n-1) ) dfs2(i,j); } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) if(!st[i][j]) mp[i][j]=2; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<mp[i][j]<<" "; cout<<endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署