HDU1312
菜鸡的第一道DFS
感悟
首先,DFS和BFS都是暴力搜索的一种,一种搜索的规则。BFS,层搜索,DFS,深度搜索。均是找到满足条件的地方停止。
理解这道题的DFS,可以这样想。
首先假定i均为1,记着是所有啊!
然后,把方向一个一个带进去(即下一个坐标),且这个坐标是合情合理的
就会发现,它一直沿着树的最左边走。
细节
说一些细节方面的东西。
首先,参数是全局的
其次DFS函数体开头就标记该路径被查到,次数加一。
#include<bits/stdc++.h> using namespace std; char room[23][23]; int dir[4][2]={ {-1,0}, {0,-1}, {1,0}, {0,1} }; int Wx,Hy,num; #define CHECK(x,y) (x<Wx&&x>=0&&y>=0&&y<Hy) struct node {int x,y;}; void DFS(int dx,int dy) { room[dx][dy]='#'; num++; for(int i=0;i<4;i++){ int newx=dx+dir[i][0]; int newy=dy+dir[i][1]; if(CHECK(newx,newy)&&room[newx][newy]=='.'){ DFS(newx,newy); } } } int main() { int x,y,dx,dy; while(cin>>Wx>>Hy){ if(Wx==0&&Hy==0){ break; } for(y=0;y<Hy;y++){ for(x=0;x<Wx;x++){ cin>>room[x][y]; if(room[x][y]=='@'){ dx=x; dy=y; } } } num=0; DFS(dx,dy); cout<<num; } }

浙公网安备 33010602011771号