题目还是挺简单的,经典的迷宫寻路问题。墙是红色块,路是黑色块,属于抵达终点的时间问题,由于二维平面,且没有过大的宽阔区域,适合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 }