欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Red and Black POJ - 1979

程序员文章站 2022-03-03 11:19:12
...

真的超级开心了,第一个完完全全自己写的dfs

#include<cstring>
#include<iostream>
using namespace std;
char a[25][25];
int ans=1;
int w,h;
void dfs(int x,int y){
	if(x-1>=0&&x-1<h&&y>=0&&y<w&&a[x-1][y]=='.'){
		a[x-1][y]='#';
		ans++;
		dfs(x-1,y);
	}
	if(x+1>=0&&x+1<h&&y>=0&&y<w&&a[x+1][y]=='.'){
		a[x+1][y]='#';
		ans++;
		dfs(x+1,y);
	}
	if(x>=0&&x<h&&y-1>=0&&y-1<w&&a[x][y-1]=='.'){
		a[x][y-1]='#';
		ans++;
		dfs(x,y-1);
	}
	if(x>=0&&x<h&&y+1>=0&&y+1<w&&a[x][y+1]=='.'){
		a[x][y+1]='#';
		ans++;
		dfs(x,y+1);
	}
	return;
}
	
int main(){
	while(cin>>w>>h&&w){
		ans=1;
		for(int i=0;i<h;i++)
			scanf("%s",&a[i]);

	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++)
			if(a[i][j]=='@') {
				dfs(i,j);
				break;
			}
	cout<<ans<<endl;
	}
}

改进版

#include<cstring>
#include<iostream>
using namespace std;
char a[25][25];
int dr[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int ans=1;
int h,w;//行,列 
void dfs(int x,int y){
	for(int i=0;i<4;i++){
		int nx=x+dr[i][0];
		int ny=y+dr[i][1]; 
		if(nx>=0&&nx<h&&ny>=0&&ny<w&&a[nx][ny]=='.'){
			a[nx][ny]='#';
			ans++;
			dfs(nx,ny);
		}
	}
	return;	
}
	
int main(){
	while(cin>>w>>h&&w){//w是列,h是行 
		ans=1;
		for(int i=0;i<h;i++)//行 
			scanf("%s",&a[i]);

	for(int i=0;i<h;i++)//行 
		for(int j=0;j<w;j++)//列 
			if(a[i][j]=='@') {
				dfs(i,j);
				break;
			}
	cout<<ans<<endl;
	}
}