题目链接:http://poj.org/problem?id=1979
题目意思:有这么一个房间,二维数组表示,其中‘.’代表瓷砖,‘*’代表障碍物,一个人从其中某一点出发,他能走过(不能穿越障碍物)房间里的多少块瓷砖。‘@’,代表起点。
类似迷宫类问题,用BFS进行深度搜索就好了。
代码:
#include<stdio.h> int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; char map[21][21]; int N,M,num; void dfs(int x,int y) { int i; for(i=0;i<4;i++) { if(x+dir[i][0]>=0&&x+dir[i][0]<M&&y+dir[i][1]>=0&&y+dir[i][1]<N) { if(map[x+dir[i][0]][y+dir[i][1]]=='.') { map[x+dir[i][0]][y+dir[i][1]]='#'; num++; dfs(x+dir[i][0],y+dir[i][1]); } } else continue; } } void main() { while((scanf("%d%d",&N,&M)!=EOF)&&(N!=0&&M!=0)) { int i,j; for(i=0;i<M;i++) scanf("%s",map[i]); for(i=0;i<M;i++) for(j=0;j<N;j++) { if(map[i][j]=='@') { num=1; dfs(i,j); } } printf("%d\n",num); } }