赞
踩
这道题,我是作为DFS入用的,最近在恶补搜索。网上关于dfs的描述乍一看,和乍两眼看感觉又不太一样,不过还是那句话,看得再多不如手敲一道,于是,我开始找题(也怎么找)然后按照自己的意思敲一遍,又比对各位佬的代码,终于将这道题A了。
话不多说,附上代码。(我估计我后面还会回来造访这篇博客,毕竟到现在我的有些思路还是没有理清)
2019 4.23
更新第一次。
终于对回溯有一点理解了
不是每个深搜都有回溯在里面。回溯主要是为了测试不同种情况,需要不断回到那个点做测试。
#include<iostream> #include<algorithm> using namespace std; int n,m; int sx,sy,ex,ey; int a[1005][1005]; int v[1005][1005],dis[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; struct node{ int x;int y; }p[5000]; int flag=0; void dfs(int x,int y,int l) { p[l].x=x;p[l].y=y; if(x==ex&&y==ey){ for(int i=0;i<=l;i++){ if(i!=l) cout<<"("<<p[i].x<<","<<p[i].y<<")->"; else cout<<"("<<p[i].x<<","<<p[i].y<<")"; } flag=1; cout<<endl; return ; } int gx,gy; for(int i=0;i<4;i++){ gx=x+dis[i][0]; gy=y+dis[i][1]; if(gx>=1&&gy>=1&&gx<=n&&gy<=m&&a[gx][gy]==1&&v[gx][gy]!=1){ v[gx][gy]=1; dfs(gx,gy,l+1); v[gx][gy]=0; } } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; cin>>sx>>sy>>ex>>ey; a[sx][sy]=0; p[0].x=sx;p[0].y=sy; dfs(sx,sy,0); if(!flag) cout<<"-1"<<endl; } 后续有问题的可以找博主一同讨论啦,博主每天都在蒟蒻的路上爬走着。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。