题意:
人只能走黑色的瓷砖,求能走的最多瓷砖数
。:表示黑色的瓷砖
# :表示红色的瓷砖
@ :表示man
分析:
油田问题http://blog.csdn.net/cqlf__/article/details/6982693的简化版,真心简单的dfs,一次ac,哈哈。对于dfs是第一次啊。需要注意的问题是输入的数字第一个表示列第二个才是表示行,表示搞错一次。
下午做了2道,还有一个1649稍微难点,我用dfs写的在hdoj上过了,但是zoj上却悲剧的卡时间了。唉,下周做bfs吧,再去解决他。。。。>_<
#include<stdio.h> int n,m,count; int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; char a[25][25]; int main() { void dfs(int x,int y); int i,j; int start_x,start_y; while(scanf("%d%d",&m,&n)!=EOF) { count=1; if(n==0&&m==0) break; for(i=0;i<=n+1;i++) { a[i][0]='#'; a[i][m+1]='#'; } for(j=0;j<=m+1;j++) { a[0][j]='#'; a[n+1][j]='#'; } for(i=1;i<=n;i++) { getchar(); for(j=1;j<=m;j++) { scanf("%c",&a[i][j]); if(a[i][j]=='@') { start_x=i; start_y=j; } } } dfs(start_x,start_y); printf("%d\n",count); } return 0; } void dfs(int x,int y) { int i; if(a[x][y]=='#') return; if(a[x][y]=='.') {count++;} a[x][y]='#'; for(i=0;i<4;i++) { dfs(x+dir[i][0],y+dir[i][1]); } }