hdu 1241 dfs簡單題
阿新 • • 發佈:2018-11-27
我是真的發現“會者不難,難者不會”這句話是真的正確。
我五分鐘敲完程式碼一遍AC,可是我剛剛放棄的那道題做了一天都沒做出來。
好傷啊兄弟。
一年以前我覺得dfs好難,現在看來像1+1==2差不多……
時間啊時間,你讓我頭髮掉了好多啊!
思路:搜尋到 ‘@’ 就把它所在的位置置為 ' * ',這也算是記錄走過的路徑。
AC程式碼:
#include <bits/stdc++.h> using namespace std; const int maxn=1e2+5; int dir[8][2]={1,0,0,1,-1,0,0,-1,1,-1,-1,1,1,1,-1,-1}; char mp[maxn][maxn]; int n,m; void dfs(int x,int y){ mp[x][y]='*'; for(int i=0;i<8;i++){ int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(xx>=0&&x<n&&yy>=0&&yy<m&&mp[xx][yy]=='@'){ dfs(xx,yy); } } } int main(){ while(cin>>n>>m,n&&m){ for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>mp[i][j]; } } int cnt=0; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(mp[i][j]=='@'){ dfs(i,j); cnt++; } } } cout<<cnt<<endl; } }