题目还是挺简单的,经典的迷宫寻路问题。墙是红色块,路是黑色块,属于抵达终点的时间问题,由于二维平面,且没有过大的宽阔区域,适合DFS
1 #include<cstdio> 2 #include<algorithm> 3 #include<iostream> 4 using namespace std; 5 bool map[22][22]; 6 bool vis[21][21]; 7 void dfs(int x,int y) 8 { 9 vis[x][y]=true; 10 if(!vis[x+1][y]&&map[x+1][y]) 11 { 12 dfs(x+1,y); 13 } 14 if(!vis[x-1][y]&&map[x-1][y]) 15 { 16 dfs(x-1,y); 17 } 18 if(!vis[x][y+1]&&map[x][y+1]) 19 { 20 dfs(x,y+1); 21 } 22 if(!vis[x][y-1]&&map[x][y-1]) 23 { 24 dfs(x,y-1); 25 } 26 return; 27 } 28 int main() 29 { 30 int n,m; 31 while(true) 32 { 33 scanf("%d%d",&m,&n); 34 if(n==0&&m==0) 35 { 36 break; 37 } 38 for(int i=0;i<=n+1;i++) 39 { 40 for(int j=0;j<=m+1;j++) 41 { 42 map[i][j]=false; 43 } 44 } 45 int s_x,s_y; 46 for(int i=1;i<=n;i++) 47 { 48 for(int j=1;j<=m;j++) 49 { 50 vis[i][j]=false; 51 char tmp; 52 cin>>tmp; 53 if(tmp=='.') 54 { 55 map[i][j]=true; 56 } 57 if(tmp=='#') 58 { 59 map[i][j]=false; 60 } 61 if(tmp=='@') 62 { 63 map[i][j]=true; 64 s_x=i; 65 s_y=j; 66 } 67 } 68 getchar(); 69 } 70 dfs(s_x,s_y); 71 int res=0; 72 for(int i=1;i<=n;i++) 73 { 74 for(int j=1;j<=m;j++) 75 { 76 res+=vis[i][j]; 77 } 78 } 79 printf("%d\n",res); 80 } 81 return 0; 82 }