标签:poj
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 24058 | Accepted: 13007 | 
Description
Input
Output
Sample Input
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
Sample Output
45 59 6 13
题意:问从@出发可以到的点的个数
简单搜索!!!
参考代码:
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
typedef long long ll;
char map[22][22];
bool used[22][22];
int dp[22][22];
int n,m;
int dirx[]={ 0,-1,0,1};
int diry[]={-1, 0,1,0};
int dfs(int x,int y){
	int sum=0;
	if (used[x][y]==true)
		return 0;
	if (dp[x][y]!=0)
		return dp[x][y];
	used[x][y]=true;
	for (int i=0;i<4;i++){
		int xx=x+dirx[i],yy=y+diry[i];
		if (map[xx][yy]=='.' && used[xx][yy]==false && xx<m && xx>=0 && yy<n && yy>=0){
			sum+=dfs(xx,yy);
		}
	}
	dp[x][y]=sum+1;
	return sum+1;
}
int main(){
	
	while (cin>>n>>m){
		if (n==0&&m==0)
			break;
		int x,y;
		memset(used,false,sizeof(used));
		memset(dp,0,sizeof(dp));
		for (int i=0;i<m;i++){
			for (int j=0;j<n;j++){
				cin>>map[i][j];
				if (map[i][j]=='@'){
					
					x=i;
					y=j;
				}
			}
		}
		cout<<dfs(x,y)<<endl;
	}
	return 0;
}
标签:poj
原文地址:http://blog.csdn.net/codeforcer/article/details/43876609