很简单的DFS搜索水题,递归理解深了很easy的!打了一遍就ac了
#include<stdio.h> int atr[25][25]; int count=1,n,m; void DFS(int x,int y) { int i=0; for(i=0;i<4;i++) { if(i==0) { if((y-1)>=0&&atr[y-1][x]==0)/*向上有点并且可以访问*/ { count++; atr[y-1][x]=1; DFS(x,y-1); } } else if(i==1) { if((x+1)<m&&atr[y][x+1]==0)/*向上有点并且可以访问*/ { count++; atr[y][x+1]=1; DFS(x+1,y); } } else if(i==2) { if((y+1)<n&&atr[y+1][x]==0) { count++; atr[y+1][x]=1; DFS(x,y+1); } } else if(i==3) { if((x-1)>=0&&atr[y][x-1]==0) { count++; atr[y][x-1]=1; DFS(x-1,y); } } } } int main(int argc, char* argv[]) { int i,j; char c; int sx,sy; while(scanf("%d%d",&m,&n)!=EOF&&(m!=0||n!=0)) { count=1; getchar(); for(i=0;i<n;i++) { for(j=0;j<m;j++) { scanf("%c",&c); if(c=='.') atr[i][j]=0; else if(c=='#') atr[i][j]=-1; else if(c=='@') { atr[i][j]=1; sx=j;sy=i; } } getchar(); } DFS(sx,sy); printf("%d ",count); } return 0; }