Oil Deposits(dfs)HDU - 1241

題目大意:有一大塊油田,現在要數總共有多少片油田,有一個角或邊聯通即可算爲同一片。

思路:dfs 如果有一塊地方是@則以這個地方爲起點dfs 把所有與其聯通的 @ 全部變爲 * 最後計算有

有多少塊即可(沒有使用book標記,直接把油田改變)

 

#include<stdio.h>
#include<string.h>
int n,m;
char z[105][105];
int check(int  a,int b){//檢查是否可以走
	if(a>=0&&a<n&&b>=0&&b<m&&z[a][b]=='@')
	return 1;
	return 0;
}
int dir[8][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};//8個方向
void dfs(int x,int y);
int main(void)
{
	while(scanf("%d%d",&n,&m),n&&m){
		int num=0;
		int i,j;
		getchar();
		for(i=0;i<n;i++) gets(z[i]);
		for(i=0;i<n;i++){
			for(j=0;j<m;j++){
				if(z[i][j]=='@'){//dfs每一個油田
					num++;
					z[i][j]=='*';
					dfs(i,j);
				}
			}
		}
		printf("%d\n",num);
	}
	return 0;
 } 
 void dfs(int x,int y){
 	int i;
 	for(i=0;i<8;i++){//走8個方向
 		int x_t=x+dir[i][0];
 		int y_t=y+dir[i][1];
 		if(check(x_t,y_t)){

 			z[x_t][y_t]='*';
 			dfs(x_t,y_t);
		 }
	 }
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章