搜索
DFS,BFS......
睡神...
一切伟大的思想,都有一个微不足道的开始。。。
展开
-
洛谷 P1037 产生数 题解
此题有两种解法:图论或者BFS两种方法都讲一下本人太菜,BFS超时,所以先讲图论解法一:图论直接上代码:for(int i=0;i<n;i++) //for 1 to n 也行 { cin>>x>>y;//读进来规则 假设读进来2 5 GA[x][y]=1;//2行5列打个勾,表示2能变5。(把GA做成bool也行) }for(int k=1;k<=9;k++)//k是中间人 for(int i=0;i原创 2020-06-27 13:16:35 · 647 阅读 · 2 评论 -
洛谷 P3956 棋盘 题解
记忆化深度优先搜索(MDFS)宏观思路:我们从左上角一直走到右下角,dp[x][y]表示所有走到(x,y)这个格子的所有路中,所需代价最小的值。for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) { g[i][j]=-1; //先把所有格子都置为-1 dp[i][j]=0x3f3f3f3f; //先赋一个很大的值 }for(int i=1;i<=n;i++){ int x,y,c; cin>&g原创 2020-06-27 08:37:57 · 418 阅读 · 0 评论 -
洛谷P6566 观星 题解
深搜+映射+集合for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]=='*') { cnt=0; dfs(i,j);//只要找到一个星星,就值得深搜下去 map[cnt]+=cnt;//map刻画的就是一个一个星系,里面存放的是星星的个数 maxv=max(maxv,map[cnt]);//举个例子,map[1]表示以1为最小单位的星系里包含的星星数量 s.insert(cnt)原创 2020-06-27 08:32:12 · 580 阅读 · 1 评论 -
洛谷 P1451 求细胞数量
宽搜搞定一切!!!**第一步:我们要对读进来的二维矩阵重新定义,存进一个bool数组中,方便宽搜。第二步:找到一个源头,进行宽搜。第三步:用STL queue 进行宽搜1.拿出队首2.沿着位移增量不停探索3.检验是否是合法格局,即新的行和列是否在1-n和1-m中.可以的话,入队,队首pop;否则,设成假,重新宽搜。对样例的解释:在如下的数字矩阵中,就有 4 个细胞:下面贴一下完整代码:#include <bits/stdc++.h>using namespace std;原创 2020-06-27 08:26:21 · 256 阅读 · 0 评论 -
洛谷1596 lake counting 题解
这是一道非常规整的DFS题目step1:先把二维数组读进来,然后发现一个‘W’,就开始顺着它做深搜。step2:做深搜,结合代码讲一下。void dfs(int x,int y)//x行y列{ a[x][y]='.';//走到这个水池就把它改成旱地,为了以后的回溯,并且避免走重复路。 for(int i=0;i<8;i++)//位移增量,无需解释 { int nx=x+dx[i]; int ny=y+dy[i]; if(a[nx][原创 2020-06-27 08:18:34 · 470 阅读 · 0 评论