1. 程式人生 > >hdu 1241 dfs簡單題

hdu 1241 dfs簡單題

我是真的發現“會者不難,難者不會”這句話是真的正確。

我五分鐘敲完程式碼一遍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;
	}
}